Trunc () функция

Добавьте следующее как дополнительную опцию компоновщика:

 /ignore:4099

Это находится в Свойствах-> Компоновщик-> Командная строка

5
задан gabr 9 September 2009 в 08:58
поделиться

2 ответа

Функции форматирования не всегда отображают фактические числа ( данные ).
Вещественные числа и точность могут быть непростыми.

Посмотрите этот код, где я использую более точную информацию о том, что хочу видеть на экране:

  D := Frac(101 / 100);
  E := Frac(101 / 100);
  ShowMessage(FloatToStrF(D, ffFixed, 15, 20));
  ShowMessage(FloatToStrF(E, ffFixed, 18, 20));

Похоже, что D это что-то вроде 0,010000000000 в то время как E похож на 0,00999999999 .

Изменить: Расширенный тип имеет лучшую точность, чем тип Double . Если мы попытаемся отобразить значения D и E с помощью FloatToString (), мы, вероятно, получим тот же результат, , хотя фактические значения не совпадают .

9
ответ дан 18 December 2019 в 11:58
поделиться

Обратите внимание на ответ Ника Д. Он прав, когда говорит, что

Похоже, что D - это что-то вроде 0,010000000000, а E - как 0,00999999999.

Ответ, однако, не в функции форматирования. Вот как выполняются вычисления с плавающей запятой. Компьютеры просто не понимают чисел с плавающей запятой (поскольку существует бесконечное количество чисел от 0 до 1, в то время как компьютеры работают с конечным числом бит и байтов), и каждая двойная или расширенная переменная в Delphi (и большинстве других языков) является всего лишь приближением. (за некоторыми действительно редкими исключениями).

Вы можете прочитать об этом больше в Википедии: Плавающая точка и Фиксированная точка

6
ответ дан 18 December 2019 в 11:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: