LINUX.ORG.RU

Что тебе мешает хранить 250 и 2, подразумевая 2,50? Погугли слово «мантисса».

Deleted
()
Ответ на: комментарий от Deleted

Да понятно что можно свою библиотеку налабать, может готовая есть.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

Вообще-то ты это и просил.

Но мы тут включили мозг за тебя, и поняли, что тебе нужно точное представление десятичных дробей, то есть Decimal.

i-rinat ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Т.е. мне весь тред втирали про int, а тут вдруг опять float.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

Что мда?

У тебя ярко выраженное непонимание принципов вычислений на вычислительных машинах. Более того, у тебя явные проблемы с выражением словами того, что тебе вообще надо. В таких условиях я не вижу способов тебе помочь, при всём возможном желании.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Я могу сделать 103.999 - '13.99', но на '13.40' я буду послан нах. Я мог и round использовать с такой же радостью.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Вещественные числа хранятся как порядок и мантисса, что мне в предыдущем треде и выдавал str(1e-11). Однако decimal делает округление, а не делает вычисления в целых числах, а потом конвертирует int в str в обход вещественных чисел.

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от steemandlinux

Ты хочешь сказать, что Decimal в процессе вычислений производит преобразования в числа с плавающей точкой (в смысле IEEE 754)?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Да, судя по описанию оно целые использует, я хреново читаю манулы :(

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Дичь какая-то:

decimal.getcontext().prec = 9
decimal.getcontext().rounding = ROUND_DOWN
a = 0.000013482
b = 1.0
print(Decimal(a)*Decimal(b))

0.0000134820000

decimal.getcontext().prec = 9
decimal.getcontext().rounding = ROUND_DOWN
a = '0.000013482'
b = '1.0'
print(Decimal(a)*Decimal(b))

0.0000134820

В обоих случаях он ложил на точность.

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от steemandlinux

Ещё чуть-чуть, и к тебе придёт осознание, что для точных расчётов нужно всё обрабатывать в целых числах. Как тебе сразу и советовали.

i-rinat ★★★★★
()

Не используй глобальный контекст Decimal, создай свой

eternal_sorrow ★★★★★
()
Ответ на: комментарий от i-rinat

что для точных расчётов нужно всё обрабатывать в целых числах

Так decimal это и есть целое число + позиция запятой в нем. Конечно то, что оно юзает bankers rounding по дефолту это большая засада, но ТС с этим уже справился.

provaton ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.