一句话说清0.1+0.2 !=0.3

97 阅读1分钟

动手试一下把0.1,0.2专成二进制,你会发现这两个数字在二进制下是个无理数...

0.1 -> 0.0001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1010 (1001循环 进一舍零)
0.2 -> 0.0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 010 (0011循环 进一舍零)
相加 -> 0.0100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 111

然后IEEE754标准是有精度长度限制的,因此再把一些小数转成2进制再转回来计算的时候必然会有舍入,所以就造成了这个精度问题

解决方法 github.com/MikeMcl/dec…