Python десятичные - PullRequest
       52

Python десятичные

1 голос
/ 24 февраля 2012

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

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

Ответы [ 5 ]

6 голосов
/ 24 февраля 2012

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

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

1 голос
/ 24 февраля 2012

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

round(0.5)
1 голос
/ 24 февраля 2012

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

0 голосов
/ 16 июня 2013

В вашей строке:

getcontext.prec()=0

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

getcontext.prec()=1

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

Удачи.

0 голосов
/ 24 февраля 2012

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

 int(Decimal(0.5))

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

 getcontext().prec = 0
 getcontext().rounding = ROUND_HALF_UP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...