如果数字是“NaN”值,如何签入if语句?我以为这会起作用
2.4.0 :003 > i = Float::NAN
=> NaN
2.4.0 :004 > puts "hi" if i
hi
=> nil
2.4.0 :005 > puts "hi" if i != Float::NAN
hi
=> nil
2.4.0 :006 > i
=> NaN
2.4.0 :007 > puts "hi" if i == Float::NAN
=> nil
但正如你所看到的,尽管事实上我把“我”设置为“NaN”,但我得到了令人困惑的输出。
答案 0 :(得分:4)
尽管我设置了"我"到了" NaN",我得到了令人困惑的输出。
根据IEEĘ754 specification,这是正确的行为。假设它已正确实现了规范,您将在任何其他语言中找到相同的东西。
# In Ruby:
Float::NAN == Float::NAN
#=> false
// In JavaScript:
NaN == NaN
// false
该规范还提供了推荐功能列表,其中包括:
isnan(x)
-"x is a NaN"
的谓词,相当于"x ≠ x"
。
在ruby中,这已经实现为Float#nan?
:
Float::NAN.nan?
#=> true
Under the hood, this is indeed asserting that x != x
:
int
isnan(double n)
{
return double_ne(n, n);
}
static int
double_ne(double n1, double n2)
{
return n1 != n2;
}
答案 1 :(得分:2)
只询问是否nan?
i = Float::NAN
i.nan?
#=> true
puts "hi" if i.nan?
#=> hi
答案 2 :(得分:1)
以下是检查方法:
> i.nan?
=> true