为什么4.1%2使用Ruby返回0.0999999999999996?但4.2%2 == 0.2

为什么4.1%2会返回0.0999999999999996?但4.2%2 == 0.2。

请参阅: 每个程序员应该知道的浮点运算

实数是无限的。 计算机正在使用有限数量的位(32位,今天64位)。 因此,计算机完成的浮点运算不能代表所有实数。 0.1是这些数字之一。

请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机代表实数的方式。

Float不能总是准确表示,请参阅

每个程序员应该知道的浮点运算

这是关于浮点的不同页面: http : //docs.python.org/tutorial/floatingpoint.html 。 它来自Python文档,但所有使用固定大小的二进制浮点数的语言都是如此。

在双精度中,4.1 = 4.0999999999999996447286321199499070644378662109375和4.2 = 4.20000000000000017763568394002504646778106689453125。 换句话说,对小数4.1的二进制近似略小于您的预期,并且对小数4.2的二进制近似略微更多。

现在为什么0.20000000000000017 …轮到0.2但0.099999999999999644 …不是圆到0.1? Ruby可能将所有输出舍入为15位有效十进制数字。

因为你在浮点工作。 二进制浮点不能精确表示0.1。