Как я понимаю вопрос, ОП задает вопрос о различном поведении между целыми числами Python и Decimal
с.Я не думаю, что для этого есть веская причина.Оба варианта возможны, но для пользователя немного странно, что они различаются.
Давайте назовем числитель n
, знаменатель d
и разделим результат на результат интергера i
иостаток r
.Это означает, что
n // d = i
n % d = r
Чтобы операции имели смысл, нам нужно
i * d + r == n
Для n = -9
и d = 5
мы видим, что это поддерживается как для i = -1, r = -4
, так и длядля i = -2, r = 1
, как видно из
(i = -1, r = -4) => -1 * 5 + -4 == -9
(i = -2, r = 1) => -2 * 5 + 1 == -9
Теперь в Python целочисленное деление определяется как всегда усеченное до минус бесконечности (вниз), а реализация Decimal
выбрала округление до нуля.Это означает, что положительные значения усекаются / округляются в меньшую сторону, тогда как отрицательные значения округляются в большую сторону.
Округление до нуля является выбором, сделанным также на языке Си.Тем не менее, мое личное мнение заключается в том, что выбор Python гораздо более разумный, особенно исходя из аппаратного обеспечения.И учитывая, что это выбор, сделанный в Python, я думаю, что это странно (и плохо), что Decimal
решил поступить так же, как в языке C.