Python 3 раунда в соответствии со стандартом IEEE 754, используя round-to-even подход.
Если вы хотите, чтобы округлить в другую сторону, а затем просто реализовать его вручную: использование
import math
def my_round(n, ndigits):
part = n * 10 ** ndigits
delta = part - int(part)
# always round "away from 0"
if delta >= 0.5 or -0.5 < delta <= 0:
part = math.ceil(part)
else:
part = math.floor(part)
return part/(10 ** ndigits)
Пример:
In [12]: my_round(0.3125, 3)
Out[12]: 0.313
Примечание: в python2 округлении всегда прочь от нуля, а в python3 он округляется до четного. (см., например, разницу в документации для функции round
между 2.7 и 3.3).
Просто 'round (a)'? – alecxe
Любая причина, по которой 3,7 миллиарда других вопросов по SO, охватывающих эту тему, вам не подходит? :-) – paxdiablo
Поиск 'IEEE 754' и' round to even'. Округление * не * неверно. Он соответствует стандарту. – Bakuriu