#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)
?