Как я могу использовать 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;
Другие вопросы по тегам