Как я могу правильно отформатировать строку для числа с плавающей запятой в Delphi?

#string #delphi #floating-point #format

#строка #delphi #значение с плавающей запятой #формат

Вопрос:

Мне нужно вызвать Format функцию, чтобы вернуть следующие строки:

 1.0 -> "1 or 1.0"
1.01 - > "1.01"
1.001 - > "1.001"
1.0000001 -> "1.0000001"
  

Возможно ли это? Строка стандартного формата %0:f возвращает только две цифры после точки (например, "1.01" ).

Ответ №1:

Используйте %g строку общего формата:

 {$APPTYPE CONSOLE}

uses
  System.SysUtils;

begin
  Writeln(Format('%g', [1.0]));
  Writeln(Format('%g', [1.01]));
  Writeln(Format('%g', [1.001]));
  Writeln(Format('%g', [1.0000001]));
end.
  

Вывод

1
1.01
1.001
1.0000001

Комментарии:

1. Спасибо, но почему это не работает для числа 90.12345678901234 ? Он возвращает 90.1234567890124 .

2. Это число находится на пределе точности для значения двойной точности. Вы понимаете проблему представимости для типов данных с плавающей запятой? Например, единственное число в вопросе, которое точно представимо, это 1.0 . Вы понимаете, что значения с плавающей запятой имеют конечную точность?

3. Мне также нужно представить, number(16,14) используя эту строку формата… Я буду использовать %0.14f для этого.

4. Я не совсем понимаю этот комментарий.

5. Может быть, глупый вопрос, но что такое number(16,14) ?