我在解释器中使用python中的以下操作并得到以下结果:
>>> 0.10*3
0.30000000000000004
>>> .10+.10
0.2
>>> 0.10 + 0.10 + 0.10
0.30000000000000004
>>> .2+0.1
0.30000000000000004
>>> _+.1
0.4
我的问题是0.30000000000000004
这000000000004
是怎么来的?
这不仅在Python中,而且在JS中,我也假设在其他语言中。
答案 0 :(得分:3)
为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而是我得到一个奇怪的结果,如0.30000000000000004?
因为在内部,计算机使用的格式(二进制浮点)无法准确表示0.1,0.2或0.3之类的数字。
编译或解释代码时,“0.1”已经四舍五入到该格式的最接近数字,即使在计算发生之前也会导致小的舍入误差。
十进制数字不能准确地表示像1/3这样的数字,所以你必须舍入到0.33这样的数字 - 而且你不要指望0.33 + 0.33 + 0.33加起来为1,你呢?
计算机使用二进制数,因为它们在处理这些数字时速度更快,并且因为对于大多数计算,小数点后17位的小错误根本不重要,因为你使用的数字不是圆的(或者说(无论如何)。
http://floating-point-gui.de/basic/
这应该有帮助