JOINs
在这种情况下表现不同。
最多15位小数,to_a
返回include?
但是一旦达到16位小数,数组会将十进制数字视为数组的一部分。
为什么?
false
为什么范围表示这是真的
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 >
答案 0 :(得分: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
Etvoilà。