2017-03-22 2 views
4

Ich war überrascht zu sehen, dass Gleitkommawerte durch eine Variante in Delphi geteilt werden konnten. Ein einfaches Beispiel dafür, was getan werden kann:Warum kann ich Single nach Variant in Delphi aufteilen, und wozu dient es?

var 
    v: Variant; 
begin 
    v := 2.3; 
    Tag := 5.1 div v; // 2 
    Tag := 5.1 mod v; // 1 
    Tag := 5.1 div 2; // [dcc32 Error] E2015 Operator not applicable to this operand type 
    Tag := 5.1 mod 2; // [dcc32 Error] E2015 Operator not applicable to this operand type 
end; 

Es sieht aus wie Delphi den linken Teil und rechten Teil Runden vor div/mod Betrieb zu tun.

Ich würde obigen Code erwarten, um Fehler bei der Kompilierung in allen 4 Zeilen zu erzeugen, da mein Verständnis ist, dass div/mod nicht auf Gleitkommawerte egal was anwendbar sind. Dies ist eindeutig nicht der Fall.

Warum kann ich Single nach Variant in Delphi aufteilen, und wozu wird es benötigt?

+0

Das ist nur Variante Zwang. Varianten sind so konzipiert, dass so viele Typkonvertierungen wie möglich möglich sind. Wenn Sie mehr darüber erfahren möchten, warum sollten Sie sich die MS COM-Dokumentation ansehen? –

Antwort

7

Von Variants in Expressions:

Wenn ein Ausdruck Varianten kombiniert mit statisch typisierte Werte, die statisch typisierte Werte werden in Varianten automatisch umgewandelt.

Dies bedeutet, dass das Fließkomma-Literal zuerst in eine Variante konvertiert wird.

Dann werden beide Varianten implizit in Integer-Werte konvertiert, um den Operator vor der Div/Mod-Operation anzupassen. Variant Type Conversions

..und wozu wird es benötigt?

Nur um so vielseitig wie möglich zu sein und OLE vollständig zu unterstützen.

+0

Sie glauben nicht, dass dieser Typ dem COM-Variantentyp entspricht? –

+0

@DavidHeffernan, ok das war zu offensichtlich. Aktualisierte Antwort Vielen Dank. –

+1

Um wählerisch zu sein, denke ich nicht, dass "OLE" hier der richtige Begriff ist. sollte "COM" sein. – kobik

Verwandte Themen