Похоже, что в каждом определении я могу найти 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
), и если да, то я просто неправильно понимаю значение «целое» в этом контексте? Или, есть ли еще история, и, возможно, это просто совпадение?
Извините, вы говорите, что ROUND_HALF_EVEN подразумевает, что последняя цифра результата будет четной, это также относится к десятичным символам? Я спрашиваю об этом, потому что если вы запустите '>>> getcontext(). Prec = 2; print (Decimal (254)/Decimal (100000)) ', используя десятичный модуль, вы получите это как результат: ** 0.0025 **, который заканчивается нечетным 5-значным числом. Не могли бы вы подробнее объяснить, что делает ROUND_HALF_EVEN в таких случаях? Спасибо за внимание! – tonix
Последняя цифра округляется до четной цифры только тогда, когда округленная сумма равна половине значения последней цифры. В вашем примере округленная сумма составляет 4/10 от последней цифры, поэтому происходит нормальное округление. «EVEN» срабатывает только при округлении точно «HALF». – casevh