Округление чисел в python
Почему в python int(0.9999999999999999) == 0, а int(0.99999999999999999) == 1?
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Потому что точность вещественных чисел в вашем компьютере ограничена.
@>>> f'{0.9999999999999999:.60g}'
'0.99999999999999988897769753748434595763683319091796875'
@>>> f'{0.99999999999999999:.60g}'
'1'
Оба числа невозможно представить точно в виде двоичной дроби (а вещественные числа хранятся в таком виде: m * 2^e, m и e - целые). Питон подыскивает наилучшее приближение. Чем больше девяток тем ближе это приближение к единице. Рано или поздно единица и получается.
P.S. int к проблеме не относится. Проблема случается раньше, когда Питон превращает строку 0.99999999999999999 в вещественное число 1.