您的位置首页百科问答

Python如何将17.955四舍五入保留两位小数?(直接用round结果不对)

Python如何将17.955四舍五入保留两位小数?(直接用round结果不对)

的有关信息介绍如下:

Python如何将17.955四舍五入保留两位小数?(直接用round结果不对)

你round(17.955)的时候其实有两步操作

第一个 是把 十进制下 你的input 17.955 转化成 Float

第二个 是把这个Float 对象传递给 round 函数

问题在于第一步

17.955实际上在计算机的存储中是17.954999999999...

一些十进制的小数,转换成二进制的时候就是无限循环小数了。精度就丢失了。

你round(17.955,2) 第三个有效数字是4,自然就是舍去了。

实话实说,你并没有很好的简约方法来真实的表达17.955

print的format和round一样靠不住

最保证正确但很笨的方法

应该是在存储的时候保存为int

比如 例子的17.955

应该保存为 17955 和 小数部分长度 3

你要保留2位有效数字就是 取决于最后一位, 所以要除以 10

对 17955 除以 10 得到 商 1795 和 余数 5

余数 5 大等于 5, 所以商要加1

(1795+1)*10 就还原成想要的int了 然后再除以 1000 就得到想要的 float了

这其实是在用二进制模拟十进制的算法