加法计算结果异常
在IDLE里输入 6.1 + 0.1 =6.19999999 为什么会这样怎么变成6.2 C:\Users\xiaobin\Desktop\pp 这是正常的,一般小数存在浮点误差 D473240632 发表于 2020-6-30 23:48这是正常的,一般小数存在浮点误差
没有解决办法吗 本帖最后由 sunrise085 于 2020-6-30 23:55 编辑
计算机是以二进制形式存储数据的。浮点数是以IEEE-754存储
float是4个字节,有效位数8位,范围:±3.40E38 IEEE-754存储4字节32位,其中尾数23位,阶码8位,符号位1位
double是8个字节,有效位数16位,范围:±1.79E308 IEEE-754存储8字节64位,其中尾数52位,阶码11位,符号位1位
所以小数要先转为二进制形式,再存储,这就导致了很多小数在转化成二进制的时候会有精度损失。就像你所遇到的6.2等等,然而有一些小数会比较精确,就是那些更好完整转化成二进制的小数,例如 0.5是2的-1次方,0.125是2的-3次方,这样的 小数一般不会出现那种很长的尾数。 帅的一塌糊涂 发表于 2020-6-30 23:49
没有解决办法吗
可以用 Python 的标准库 decimal 这个更为精确
不过如果要精确到小数只能先把数值 str 为字符串然后这样做就不会产生误差了:
from decimal import Decimal
print(Decimal('6.1') + Decimal('0.1'))
你可以试着运行上述代码
返回结果:
6.2
本帖最后由 2291437529 于 2020-7-1 02:45 编辑
sunrise085 发表于 2020-6-30 23:52
计算机是以二进制形式存储数据的。浮点数是以IEEE-754存储
float是4个字节,有效位数8位,范围:±3.40E38 ...
直击原理
页:
[1]