Mit System.SysUtils.TShortIntHelper
(und andere) ich schreiben kann:Wie kann ich TExtendedHelper für Literale verwenden?
output := 5.ToString();
die Anzahl 5
als string
zu formatieren. Wie gut, es System.SysUtls.TExtendedHelper
ist, aber ich bin nicht in der Lage zu kompilieren:
output := (5.0).ToString();
E2018: Record, Objekt oder Klassentyp erforderlich
Andere Versionen, die nicht funktionieren:
5.0.ToString()
(1.0+5.1).toString()
(5+0.).toString()
(sagt E2029: ')' erwartet, aber ']' gefunden)
Versionen, die funktionieren tatsächlich:
(1+5.1).toString()
(1.1+1+5.1).toString()
5.9e0.toString()
Wenn der erweiterte Wert deklariert ist const
, funktioniert es nicht entweder:
function TestFormat(): String;
const
q = 5.5;
begin
Result := q.ToString();
end;
Aber mit einer Definition von q : extended = 5.5;
es funktioniert. Ich frage mich, warum sich der Compiler so verhält.
den traditionellen 'Win32' Compiler. – ventiseis
(wilde Schätzung) Ich sehe das Muster: eine 'Integer'-Konstante ist in jedem Ausdruck, der funktioniert, vorhanden (und wird in' Real' konvertiert). Ich rate nicht, was es bedeuten könnte, tho. –
Ich würde vorschlagen, eine explizite Typumwandlung zu versuchen. Z.B. 'Extended (5.5) .Frac;' Leider habe ich keine passende Version von Delphi, um mich selbst zu testen. –