2017-03-18 3 views
5

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.

+0

den traditionellen 'Win32' Compiler. – ventiseis

+0

(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. –

+0

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. –

Antwort

6

Sie haben Fehler im Compiler gefunden. Bitte melden Sie es im Qualitätsportal.

Eine Abhilfe ist die Helfer Klasse Funktionen zu verwenden:

myString := Extended.ToString(5.5); 
class function ToString(const Value: Extended): string; overload; inline; static; 
class function ToString(const Value: Extended; const AFormatSettings: TFormatSettings): string; overload; inline; static; 
class function ToString(const Value: Extended; const Format: TFloatFormat; const Precision, Digits: Integer): string; overload; inline; static; 
class function ToString(const Value: Extended; const Format: TFloatFormat; const Precision, Digits: Integer; 
          const AFormatSettings: TFormatSettings): string; overload; inline; static; 
+2

Ein [Fehlerbericht, Problem RSP-17093] (https://quality.embarcadero.com/browse/RSP-17093) wurde übermittelt. – ventiseis

Verwandte Themen