Разница между добавлением py2 и py3 в формате с плавающей запятой

a = 310.97
b = 233.33
sum= 0.0
for i in [a,b]:
    sum += i
print(sum)

py2 o/p: 544.3

py3 o/p: 544.3000000000001

Есть ли способ сообщить о выводе py3 так же, как py2 с futurizing? без использования округления?


person Bhanu    schedule 18.05.2021    source источник


Ответы (1)


Вы можете преобразовать значения в целые числа перед выполнением операции, а затем разделить на константу, например. 100.0 в данном случае.

a = 310.97
b = 233.33
c = int(a * 100)
d = int(b * 100)
sum = 0
for i in [c,d]:
    sum += i
result = sum / 100.0
print(result)  # 544.3

Причина различия заключается в точности преобразования числа с плавающей запятой в строку в двух версиях Python.

a = 310.97
b = 233.33
sum = 0.0
for i in [a,b]:
    sum += i
print("{:.12g}".format(x)) # 544.3

Дополнительные сведения см. в этом ответе: округление по умолчанию в формате Python при форматировании числа с плавающей запятой < /а>

person Dan Nagle    schedule 18.05.2021
comment
Я могу просто выполнить раунд (сумма, 2) в конце.. но я хочу знать с футуризацией, сможем ли мы решить это или нет.. Спасибо за отклик - person Bhanu; 18.05.2021
comment
Python 2 усекает значение при преобразовании строки. Я добавил ссылку на свой ответ, который объясняет это. - person Dan Nagle; 18.05.2021