2

to_a在这种情况下,在一定范围内的整数表现不同。最多 15 位小数,include?返回,false但一旦达到 16 位小数,数组将小数位视为数组的一部分。

为什么?

2.2.1 :020 > (1..9).to_a.include?(8.999999999999999)
 => false 
2.2.1 :021 > (1..9).to_a.include?(8.9999999999999999)
 => true 
2.2.1 :022 >

为什么范围只说这是真的

2.2.1 :001 > (1..9).include?(8.9)
 => true 
4

1 回答 1

4

(1..9).include?(8.9)与 相同1 <= 8.9 && 8.9 <= 9。我认为这很明显为什么会返回true

(1..9).to_a返回数组[1,2,3,4,5,6,7,8,9]。这导致另一个观察结果:

8.999999999999999 == 9   #=> false
8.9999999999999999 == 9  #=> true

浮点恶作剧

您可能想用它next_float来研究下一个可表示的浮点数(正如 Tom Lord 在评论中指出的那样):

8.999999999999999.next_float   #=> 9.0
8.9999999999999999.next_float  #=> 9.000000000000002

等等瞧。

于 2016-05-17T14:51:08.217 回答