一、现象描述
由于 python3 包括python2.7 以后的round策略使用的是decimal.ROUND_HALF_EVEN
即Round to nearest with ties going to nearest even integer. 也就是只有在整数部分是奇数的时候, 小数部分才逢5进1; 偶数时逢5舍去。 这有利于更好地保证数据的精确性, 并在实验数据处理中广为使用。
二、修改decimal上线文,实现一般意义上的精确四舍五入
ROUND_HALF_UP (to nearest with ties going away from zero), or
import decimal
from decimal import Decimal
print(decimal.getcontext())
context=decimal.getcontext() # 获取decimal现在的上下文
context.rounding = decimal.ROUND_HALF_UP #修改rounding策略
print(decimal.getcontext())
print(round(Decimal(1.5659898), 2))
print(round(Decimal(1.5344898), 2))
print(round(Decimal(2.5659898), 2))
print(round(Decimal(2.5359898), 2))
# with decimal.localcontext() as ctx:
# ctx.prec = 32
# ctx.rounding=decimal.ROUND_HALF