【发布时间】:2016-09-13 16:43:48
【问题描述】:
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
【问题讨论】:
-
(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.9999999999999999 == 9eval 为true,但8.999999999999999 == 9为false?浮点恶作剧... -
又一个“为什么数字在x语言中不起作用”问题。 xd
-
@spickermann,你应该把它写成答案。
标签: ruby ruby-on-rails-3 ruby-2.1 ruby-2.2