问题
我们想将一个浮点数取整到固定的小数位。
3.1.2 解决方案
对于简单的取整操作,使用内建的 round(value, ndigits)函数即可。示例如下:
>>> round(1.23, 1)
1.2
>>> round(1.27, 1)
1.3
>>> round(-1.27, 1)
-1.3
>>> round(1.25361,3)
1.254
>>>
当某个值恰好等于两个整数间的一半时,取整操作会取到离该值最接近的那个偶数上。也就是说,像 1.5 或 2.5 这样的值都会取整到 2。
传递给 round()的参数 ndigits 可以是负数,在这种情况下会相应地取整到十位、百位、千位等。示例如下:
>>> a = 1627731
>>> round(a, -1)
1627730
>>> round(a, -2)
1627700
>>> round(a, -3)
1628000
>>>
3.1.3 讨论
在对值进行输出时别把取整和格式化操作混为一谈。如果只是将数值以固定的位数输出,一般来说是用不着 round()的。相反,只要在格式化时指定所需要的精度就可以了。示例如下:
>>> x = 1.23456
>>> format(x, '0.2f')
'1.23'
>>> format(x, '0.3f')
'1.235'
>>> 'value is {:0.3f}'.format(x)
'value is 1.235'
>>>
此外,不要采用对浮点数取整的方式来“修正”精度上的问题。比如,我们可能会倾向于这样做:
>>> a = 2.1
>>> b = 4.2
>>> c = a + b
>>> c
6.300000000000001
>>> c = round(c, 2) # "Fix" result (???)
>>> c
6.3
>>>
对于大部分涉及浮点数的应用程序来说,一般来讲都不必(或者说不推荐)这么做。尽管这样会引入一些小误差,但这些误差是可理解的,也是可容忍的。如果说避免出现误差的行为非常重要(例如在金融类应用中),那么可以考虑使用 decimal 模块,这也正是下一节的主题。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于