Math 简单数学编程语言的奇怪行为。操作

Math 简单数学编程语言的奇怪行为。操作,math,floating-point,Math,Floating Point,我在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.300000000004中,这个0000000000004是如何

我在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.300000000004
中,这个
0000000000004
是如何产生的


这不仅在Python中,在JS中也是如此,我假设在其他语言中也是如此。

为什么我的数字,比如0.1+0.2,加起来不是一个很好的整数0.3,而是一个奇怪的结果,比如0.300000000000000004

因为在内部,计算机使用的格式(二进制浮点)根本不能准确地表示0.1、0.2或0.3这样的数字

在编译或解释代码时,您的“0.1”已经四舍五入到该格式中最接近的数字,这甚至会在计算之前产生一个小的四舍五入错误

十进制数字不能准确地表示1/3这样的数字,所以你必须四舍五入到0.33左右——你也不希望0.33+0.33+0.33加起来等于1,是吗

计算机使用二进制数是因为它们处理二进制数的速度更快,而且对于大多数计算来说,小数点后第17位的微小错误根本不重要,因为您使用的数字不是四舍五入(或那样精确)


这将有助于

搜索主题
浮点算术
。你问的问题一周大约被问100次,而且回答的频率也差不多。看看这个小家伙。这个问题在苏黎世经常发生。