通常,python四舍五入使用内置的round函数就可以了
>>> round(0.4)
0.0
>>> round(0.5)
1.0
然而,对于需要精确的四舍五入,就有问题
>>> round(1.115,2) # no
1.11
>>> round(1.125,2) # yes
1.13
原因是,部分小数无法完全用二进制表示
1.115,存储为——1.1149999999999999911182158029987476766109466552734375
1.125,存储为——1.125(可完全用二进制表示)
再来看一下文首的两个数值
0.4,存储为——0.40000000000000002220446049250313080847263336181640625
0.5,存储为——0.5(可完全用二进制表示)
于是,作为一个较方便的做法,我们可以使用下面方式实现精确的四舍五入
def round_up(value):
# 替换内置round函数,实现保留2位小数的精确四舍五入
return round(value * 100) / 100.0
原理就是将数值放大100倍,以利用下面的精确的四舍五入的结果
>>> round(0.4)
0.0
>>> round(0.5)
1.0
测试一下
>>> round_up(1.115)
1.12
>>> round_up(1.125)
1.13
网友评论