#python #integer-division
Вопрос:
У меня есть следующий фрагмент кода с довольно странным результатом.
Код Я:
print("{:.2f}".format(1023456789876543201/9))
Результат:
113717421097393696.00
Кодекс II:
print("{:20d}".format(1023456789876543201//9))
Результат:
113717421097393689
Почему Python возвращает неверный результат в первом примере кода? Я знаю об арифметике с плавающей запятой, но мне кажется, что это не так.
Комментарии:
1. «Я знаю об арифметике с плавающей запятой, но мне кажется, что это не так». На самом деле так оно и есть. Поплавки могут точно представлять только целые числа до 2^53. Если вам нужна точность, попробуйте использовать дробные или десятичные модули.
2. Может быть, попробовать использовать
x//y
.3. В результате деления
1.137174210973937e 17
я предполагаю , что формат использует это значение, которое потеряло точность.4. Печать только разделяемого значения (т. Е. без учета
/9
) может прояснить ситуацию.5. @СуперСтормер. Ладно, кажется, теперь я все понял. Таким образом, все плавающие числа хранятся в Python как «обычные десятичные», как и в других языках, таких как C#, Java, с ограниченной точностью, верно? И Python использует «специальный» формат чисел ( rushter.com/blog/python-integer-implementation ) только для «истинных» целых чисел, верно?