Email or username:

Password:

Forgot your password?
Мя :sparkles_lesbian:

>>> a = 1.05
>>> a
1.05
>>> Decimal(a)
Decimal('1.0500000000000000444089209850062616169452667236328125')
>>> Decimal(str(a))
Decimal('1.05')

я искренне не понимаю, почему питон при работе с флоатом сначала работает нормально, а как только нужно сконвертировать в Decimal сразу вспоминает, что у флоата существует погрешность и суёт её в результат :blobcatheadachent:

4 comments
Мя :sparkles_lesbian:

Причем это происходит даже со специально предназначенным для этого конструктором Decimal.from_float

Получается...Самый точный метод конвертации из флоата в децимал это перегнать в строку и обратно,,,,,

Ваня

@mo не очень понял проблему. А где тебе это мешает?

Концептуально-одаренный

@mo и будет так во веки веков(ибо вообще это баг ещё из С, который любил при перегоне просто брать следующие ячейки памяти, независимо от их состава, и не то чтобы оставлял знаменитую погрешность плавающей точки, но создавал ее на пустом месте)

Мя :sparkles_lesbian:

@DatGuyFromRussia та я знаю откуда этот баг. Он не из C, он из самого стандарта IEEE754. Флоат просто не может представить число 1.05. Совсем. В принципе

Претензия тут в том, что питон в одном месте округляет, а в другом нет, и получается "опаньки..."

Go Up