Der obige Code wird ausgegeben:
VarType: Einzel: 5, Doppel 5
Von System.pas
%Vor% Also würde ich erwarten, dass VTSingle 4 ist - nicht 5
Was vermisse ich?
Die Delphi-Bibliotheken entscheiden sich dafür, alle Gleitkommazuweisungen zu Varianten mit einem Aufruf von _VarFromReal
zu implementieren. Und diese Funktion sieht so aus:
Beachten Sie, dass hierfür der Typ varDouble
verwendet wird. Und beinhaltet eine implizite Konvertierung in Real
, was ein Alias für Double
ist. Ich bin nicht sicher, warum die Designer diesen bestimmten Weg gewählt haben, aber die Konsequenz dieser Wahl ist das Verhalten, das Sie beobachten.
Eine einfache Möglichkeit, eine varSingle
Variante zu erstellen, die Sie verwenden können:
Dies konvertiert SingleTest
in Double
und dann wieder zurück in Single
.
Um diese unnötige Konvertierung zu vermeiden, schreiben Sie Ihren eigenen Helfer:
%Vor%, die Sie so nennen können:
%Vor%Dieser letztere Ansatz ist meines Erachtens die richtige Lösung.