0

немного странное поведение Python

a = 119.6
b = a-0.01

print(a,b)

Получаю: 119.6 119.58999999999999 А хочу получить 119.6 119.59 Почему так происходить как исправить?

1 Answers1

2

Это довольно известная проблема и заключается она в неточности вещественных чисел. Дело в том, что в памяти все числа хранятся в двоичном формате и для некоторых десятичных чисел с малым количеством знаков после запятой порой требуется огромное количество знаков после запятой в двоичной системе. А так как память не бесконечна и получаются такие мелкие неточности.

Решение данной проблемы заключается в том, что бы ограничить количество выводимых знаков после запятой (взято из https://ru.stackoverflow.com/a/648659/428851)

def toFixed(numObj, digits=0):
    return f"{numObj:.{digits}f}"
a = 119.6
b = a-0.01
print(a, toFixed(b, 2))