Я ожидаю, что 0.5 округлится до 1. Кто-нибудь может объяснить, почему вместо этого округляется до 0?
0.5
1
0
>>> from decimal import * >>> getcontext().prec = 0 >>> +Decimal(0.5) Decimal('0')
Вы запросили ноль значащих цифр точности. Если вы вообще не разрешите сохранять какие-либо цифры, все числа будут равны нулю.
Обратите внимание, что точность - это число значимых десятичных цифр, то есть без учета начальных нулей 0.5 имеет одну значащую цифру, 1.5 имеет две. Также обратите внимание, что Decimal использует банковское округление .
1.5
Decimal
Я не уверен, какой здесь вариант использования, но почему бы просто не сделать:
round(0.5)
вы устанавливаете точность на 0, попробуйте вместо этого установить 1 или 2.
В вашей строке:
getcontext.prec()=0
вы запрашиваете 0 десятичных знаков - все десятичные дроби будут возвращать 0 таким образом.Попробуйте:
getcontext.prec()=1
Или другое число, чтобы установить количество десятичных знаков.
Удачи.
Я бы просто преобразовал в int, если вы хотите целое число.
int(Decimal(0.5))
Вы также можете убедиться в правильности настройки округления.
getcontext().prec = 0 getcontext().rounding = ROUND_HALF_UP