Добавьте следующее как дополнительную опцию компоновщика:
/ignore:4099
Это находится в Свойствах-> Компоновщик-> Командная строка
Функции форматирования не всегда отображают фактические числа ( данные ).
Вещественные числа и точность могут быть непростыми.
Посмотрите этот код, где я использую более точную информацию о том, что хочу видеть на экране:
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 (), мы, вероятно, получим тот же результат, , хотя фактические значения не совпадают .
Обратите внимание на ответ Ника Д. Он прав, когда говорит, что
Похоже, что D - это что-то вроде 0,010000000000, а E - как 0,00999999999.
Ответ, однако, не в функции форматирования. Вот как выполняются вычисления с плавающей запятой. Компьютеры просто не понимают чисел с плавающей запятой (поскольку существует бесконечное количество чисел от 0 до 1, в то время как компьютеры работают с конечным числом бит и байтов), и каждая двойная или расширенная переменная в Delphi (и большинстве других языков) является всего лишь приближением. (за некоторыми действительно редкими исключениями).
Вы можете прочитать об этом больше в Википедии: Плавающая точка и Фиксированная точка