0.1 + 0.2 == ?
肯定是 0.3 啊。没错,在数学上的确是等于这个值。可是在计算机的世界里,由于浮点数目前还不能很精确地表示出来,所以这个数相加后的值会有偏差,不是你想象中的值 0.3。
为了看下相加后的值是多少,我分别用了 JavaScript\Java\Ruby\Python 测试,结果均得出值: 0.30000000000000004。 恩,这个大家都知道,浮点数运算一般都会有偏差的。 于是,我又测试了其他浮点数的相加,例如:0.1 + 0.1,0.2 + 0.2,0.1 + 0.4 …… 可是这些运算的返回值却和数学上的相加精确值一样,也就是说不是所有的浮点运算都会返回偏差值。
细思极恐下,平时有涉及到浮点运算时,如果单纯地用数学计算方式去运算,可能大部分情况下都不会出错,可是当遇到类似 0.1 + 0.2 的情况时,可能就会导致 bug 的出现了。
以后在涉及到浮点运算时,首先要看所用编程语言平台是否提供了相关浮点运算支持方案可用,没有的话则要避免想当然直接运算,应该把运算结果假设在一定误差范围内。