如何检查数组是否包含Float :: NAN

时间:2016-08-03 18:08:13

标签: ruby nan

我发现这种行为很奇怪

> [1, 2, 3, 'a', 'b', Float::NAN].include? Float::NAN
false

我当时试了这个并且感到惊讶

> Float::NAN == Float::NAN
false

因此,要检查Float::NAN,我不得不求助于

> [1, 2, 3, 'a', 'b', Float::NAN].any? { |i| i.is_a?(Float) && i.nan? }
true

所以,

  1. 有没有更好的方法来检查数组中的Float::NAN
  2. 为什么Float::NAN会出现这种奇怪的行为?

1 个答案:

答案 0 :(得分:2)

要检查,您可以使用:

[1, 2, 3, 'a', 'b', Float::NAN].any?{|item| item.respond_to?(:nan?) && item.nan?}

(或try,如果您使用Rails)

至于 why ,请查看What is the rationale for all comparisons returning false for IEEE754 NaN values?