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? без использования округления?
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? без использования округления?
Вы можете преобразовать значения в целые числа перед выполнением операции, а затем разделить на константу, например. 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 при форматировании числа с плавающей запятой < /а>