Я только что обнаружил, что:
round(3.5) = 4
пока:
round(2.5) = 2
То есть, когда число заканчивается на 0,5 , оно иногда округляется вверх (как и должно быть), а иногда округляется вниз.
Я хочу сделать программу, которая делает какие-то вычисления, но хорошо их округляет, не стоит того, что 55.5 округляет до 55 .
Как я могу сделать так, чтобы для любого числа числа, заканчивающиеся на .5 , были хорошо округлены ?
У меня это не работает , ceil
потому что если число равно 2,4, оно будет округлено до 3 , что тоже неверно.
Я не хочу знать, почему это происходит, я хочу знать, как сделать так, чтобы такой код работал хорошо:
X=a*b , где a и b — 2 десятичных числа
print(round(X))
, чтобы пользователь мог видеть округленное число, поэтому оно кажется простым, но если оно дает 14,5, оно округляет меня до 14 . И это неправильное округление в науке.
Почему это происходит, объясняется в разделе Почему Python 3 round() округляет 3,5 до 4, а 2,5 до 2? . По сути, Python 3 использует bankers rounding , то есть банкирское округление, заключающееся в округлении
.5
до ближайшего четного числа.Если вы хотите точно контролировать, какое округление вы применяете, используйте модуль
decimal
с его опциямиROUND_HALF_EVEN
илиROUND_HALF_UP
( есть еще )ROUND_HALF_DOWN
:Я оставляю вам два решения:
1. Используйте десятичный пакет
2. Используйте математический пакет
Вы можете проверить целую часть числа и, исходя из этого, решить округлить или оставить как есть.
В случае, если число заканчивается на 0,5, он
round
решает округлить число до ближайшего четного числа, если целая часть нечетная, оно округляется до ближайшего меньшего четного числа. Поэтому, если число нечетное, округляйте в большую сторону, иначе оставьте как есть.Или вы можете выбрать другое решение, которое заключается в проверке десятичной части, если она равна 5, просто округлить.
В коде это будет
Правда в том, что это кажется довольно странным... Вы можете попробовать управлять им с помощью a
if(charAt(num) == '.5')
и заставить его выполнять принудительное округление следующим образом: