Python-CookBook:40、对数值进行取整

本贴最后更新于 1947 天前,其中的信息可能已经时移俗易

 问题

我们想将一个浮点数取整到固定的小数位。

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 模块,这也正是下一节的主题。

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    546 引用 • 672 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    78 引用 • 391 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...