Warum führt die Zuweisung eines einzelnen zu einer Variante zu einer varDouble-Variante?

8
%Vor%

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?

    
Martin Trummer 28.02.2013, 10:46
quelle

1 Antwort

5

Die Delphi-Bibliotheken entscheiden sich dafür, alle Gleitkommazuweisungen zu Varianten mit einem Aufruf von _VarFromReal zu implementieren. Und diese Funktion sieht so aus:

%Vor%

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:

%Vor%

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.

    
David Heffernan 28.02.2013, 10:57
quelle

Tags und Links