python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python round()函数避坑

Python round()函数避坑指南

作者:逍遥Fau

Python的round()函数用法与陷阱揭秘!想知道为什么保留小数时5有时进位有时舍去?本文用Python 3.10.2实测,帮你避开四舍五入的隐藏规则,掌握核心用法与正确规律,点击立即获取round()的完整使用指南

Python的round()函数用法及结果

Python版本信息:

Python 3.10.2 (main, Feb 2 2022, 06:19:27) [Clang 13.0.0 (clang-1300.0.29.3)]

IPython 8.2.0 – An enhanced Interactive Python. Type ‘?’ for help.

输入 help(round)可以得到下列信息:

Help on built-in function round in module builtins:

round(number, ndigits=None)
    Round a number to a given precision in decimal digits.
    
    The return value is an integer if ndigits is omitted or None.  Otherwise
    the return value has the same type as the number.  ndigits may be negative.

说明:上文信息表示round()是python中的一个内置函数, 可以把指定数字进行十进制下的四舍五入. 且可以接受最多两个参数

发现的问题

如果我们要保留小数点后x位, 则当第x + 1位是5的时候, 会产生很神奇的结果:

有时候向上取,有时候又是向下取.

得出结论

最后经过实验, 总结出如下规律:

如果此时要保留ndigitsndigitsndigits位, 而小数点后第ndigits+1ndigits + 1ndigits+1位是555, 则判断小数点后ndigits+2ndigits + 2ndigits+2位是否存在(且不为000). 若存在则进位, 反之则看解释器心情.

例如:

round(5.3351,2)→5.34round(5.3351, 2) \rightarrow 5.34round(5.3351,2)→5.34
round(5.325,2)→5.33,round(5.345,2)→5.34round(5.325, 2) \rightarrow 5.33, round(5.345, 2) \rightarrow 5.34round(5.325,2)→5.33,round(5.345,2)→5.34

我也浏览了其他博客,其他博主有两种错误的理解:

以上说法是不正确的,均在上图中体现出反例

这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文