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了
这其实是在用二进制模拟十进制的算法



