Python四舍五入

2017-03-05  本文已影响5093人  乔布斯的同学

通常,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
上一篇下一篇

猜你喜欢

热点阅读