Python python 使用 round 方法保留 1 位和 2 位小数时没有进行四舍五入

corei99 · 2024年07月24日 · 最后由 magicyang 回复于 2024年07月26日 · 4805 次阅读

今天在进行自动化测试时偶然发现使用 python 的 round 方法保留 1 位和 2 位小数位时没有进行四舍五入,如下:
print(round(1.5,0)) 返回 2.0
print(round(1.45,1)) 返回 1.4,没有进行四舍五入
print(round(1.845,2)) 返回 1.84,没有进行四舍五入
print(round(1.8445,3)) 返回 1.845
使用 python 3.7 和 3.9 版本测试均是如此,各位大佬们可有解决方案?

共收到 9 条回复 时间 点赞

这是计算机的问题,不是 python 的问题,计算机是二进制,你用内置的 decimal 库就行了
话说这种问题不直接百度或者 gpt 问下吗? 很死板的问题

经常贪污的同学都知道,四舍五入会导致刑期虚高

建议你看下 python 的官方文档或者用你的 gpt 查一下什么是 “银行家舍入法” 之后再来回答啊,不要误导我啊大佬。

对精度有要求就用 decimal,特别是浮点数,计算机都是近似表示的

浮点数真是一个超坑的类型,位数多了就会出现精度丢失和科学技术法的问题

就爱看你的回复

浮点运算的表达协议是 IEEE 754.
python round 的源码实现:
https://github.com/python/cpython/blob/main/Objects/floatobject.c
没需求,我不太想花精力看细节了。
问题倒是挺有意思的。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册