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

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

 问题

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

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

    556 引用 • 675 回帖
  • 书籍

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

    77 引用 • 389 回帖

相关帖子

欢迎来到这里!

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

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