2013-04-04 4 views
1

Похоже, что в каждом определении я могу найти round half to even включает nearest even integer (например, Python's decimal documentation), как если бы ТОЛЬКО целые числа округлялись. Однако, если я округлю десятичные числа меньше 1, он, похоже, следует за одним и тем же принципом, только назначая роль integer десятичному месту, к которому я обращаюсь. Пример:Каким образом ROUND_HALF_EVEN Python должен обрабатывать десятичные знаки меньше 1?

>>> THREE_PLACES = decimal.Decimal('0.000') 
>>> 
>>> decimal.Decimal('.0005').quantize(THREE_PLACES) 
>>> Decimal('0.000') 
>>> 
>>> decimal.Decimal('.0015').quantize(THREE_PLACES) 
>>> Decimal('0.002') 

В этом примере значение третьего десятичного знака, кажется, играет роль целого числа (округление вниз к 0 и до 2). Является ли это указанным способом обработки чисел меньше нуля (и, как предполагается, должен функционировать Python ROUND_HALF_EVEN), и если да, то я просто неправильно понимаю значение «целое» в этом контексте? Или, есть ли еще история, и, возможно, это просто совпадение?

ответ

1

Ваша интерпретация верна. Документация нечеткая и, вероятно, должна использовать слово digit вместо integer. ROUND_HALF_EVEN подразумевает, что последняя цифра результата будет четной (при округлении точно ... 5000).

+0

Извините, вы говорите, что ROUND_HALF_EVEN подразумевает, что последняя цифра результата будет четной, это также относится к десятичным символам? Я спрашиваю об этом, потому что если вы запустите '>>> getcontext(). Prec = 2; print (Decimal (254)/Decimal (100000)) ', используя десятичный модуль, вы получите это как результат: ** 0.0025 **, который заканчивается нечетным 5-значным числом. Не могли бы вы подробнее объяснить, что делает ROUND_HALF_EVEN в таких случаях? Спасибо за внимание! – tonix

+0

Последняя цифра округляется до четной цифры только тогда, когда округленная сумма равна половине значения последней цифры. В вашем примере округленная сумма составляет 4/10 от последней цифры, поэтому происходит нормальное округление. «EVEN» срабатывает только при округлении точно «HALF». – casevh

Смежные вопросы