Python Десятичные числа

Я жду 0.5 округлить до 1, Кто-нибудь может объяснить, почему это округляется до 0 вместо?

>>> from decimal import *
>>> getcontext().prec = 0
>>> +Decimal(0.5)
Decimal('0')

5 ответов

Решение

Вы просили ноль значащих цифр точности. Если вы вообще не разрешите сохранять какие-либо цифры, все числа будут равны нулю.

Обратите внимание, что точность - это число значащих десятичных цифр, то есть не считая начальных нулей. 0.5 имеет одну значащую цифру, 1.5 имеет два Также обратите внимание, что Decimal использует банковское округление.

Вы устанавливаете точность на 0, попробуйте установить ее на 1 или 2.

Я не уверен, какой вариант использования здесь, но почему бы просто не сделать:

round(0.5)

В вашем:

getcontext.prec()=0

строка, вы запрашиваете 0 десятичных знаков - все десятичные дроби будут возвращать 0 таким образом. Пытаться:

getcontext.prec()=1

Или другое число, чтобы установить количество десятичных знаков.

Удачи.

Я бы просто преобразовал в int, если вы хотите целое число.

 int(Decimal(0.5))

Вы также можете убедиться в правильности настройки округления.

 getcontext().prec = 0
 getcontext().rounding = ROUND_HALF_UP
Другие вопросы по тегам