Как я могу использовать TExtendedHelper для литералов?
С System.SysUtils.TShortIntHelper
(и другие) я могу написать:
output := 5.ToString();
отформатировать номер 5
как string
, Как хорошо, есть System.SysUtls.TExtendedHelper
, но я не могу скомпилировать:
output := (5.0).ToString();
E2018: требуется запись, объект или тип класса
Другие версии, которые не работают:
5.0.ToString()
(1.0+5.1).toString()
(5+0.).toString()
(говорит E2029: ')' ожидается, но ']' найден)
Версии, которые действительно работают:
(1+5.1).toString()
(1.1+1+5.1).toString()
5.9e0.toString()
Если объявлено расширенное значение const
тоже не работает:
function TestFormat(): String;
const
q = 5.5;
begin
Result := q.ToString();
end;
Но с определением q : extended = 5.5;
оно работает. Итак, мне интересно, почему компилятор ведет себя так.
1 ответ
Решение
Вы нашли ошибки в компиляторе. Пожалуйста, сообщите об этом на портале качества.
Обходной путь должен использовать функции класса помощников:
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;