Это ожидается .В конкретном примере двоичное представление десятичного числа 61,55 с одинарной и двойной точностью соответственно:
REAL_32: 0 10000100 11101100011001100110011
REAL_64: 0 10000000100 1110110001100110011001100110011001100110011001100110
Как видите, трейлинг-паттерн 0011
является рекуррентным и должен идти до бесконечности, чтобы дать точное значение.
Когда REAL_32
назначено REAL_64
, конечные 0011
s не добавляются автоматически, а вместо этого заполняются нулями:
REAL_32: 0 10000100 11101100011001100110011
REAL_64: 0 10000000100 1110110001100110011001100000000000000000000000000000
В десятичной записи это соответствует 61.54999923706055
.Что здесь важно, 61.54999923706055
и 61.55
имеют абсолютно одинаковое двоичное представление при использовании плавающих чисел одинарной точности.Вы можете проверить это самостоятельно с помощью print ({REAL_32} 61.55 = {REAL_32} 61.54999923706055)
.Другими словами, вы получите правильные и два значения одинаковы.Единственное отличие состоит в том, что при печати REAL_32
оно округляется до меньшего числа значащих десятичных цифр.
По этой причине программное обеспечение бухгалтерского учета и бухгалтерского учета никогда не использует числа с плавающей запятой, только целые и десятичные.