0
ff = 123434534534535234234.999423423421231231
print('{:.3f}'.format(ff))

выдает:

123434534534535233536.000

Почему?

Kto To
  • 1,118

1 Answers1

2

123434534534535234234.999423423421231231

очень большое число для фиксированной точки и оно стало числом с плавающей точкой

1.2343453453453523e+20

считайте мы потеряли все цифры после 3523.

4234 стало 3536 из-за конвертации двоичного числа с плавающей точкой в десятичное при форматировании.

Если нужно пользоваться числами больше 12 знаков - лучше воспользоваться специальными типами из математических библиотек или из decimal.

eri
  • 35,224
  • 1
    ответ неверный. 1- ..4234 превращается в ..3536 не при форматировании, а ещё на этапе создания float объекта из константы, заданной в исходном коде. ''.format() точно здесь печатает этот float объект. В сторону: вне зависимости от величины ff это число с плавающей точкой в Питоне. Поэтому оно не "стало числом с плавающей точкой", оно всегда было числом с плавающей точкой. Даже если вы 0.1 напишите, это также число с плавающей точкой в Питоне. Подробней о плавающей точке, смотрите ответ на вопрос, на который я выше сослался – jfs Aug 04 '17 at 04:27
  • @jfs репутации у Вас должно хватить чтоб внести уточнения в ответ) – eri Aug 04 '17 at 05:34
  • 1
    Правки, которые смысл ответа изменяют, не приветствуются на SO. К тому же, ответ в целом неверный, демонстрирует отсутствие понимания сути проблемы. "Уточнением" в данном случае является новый ответ. Я этот ответ уже написал. Когда позволит репутация, чтобы помочь будущим читателям, можете проголосовать за закрытие данного вопроса как дубликата. – jfs Aug 04 '17 at 05:52