如何在Ruby中声明NaN(不是数字)?

此外,“NaN”.to_f返回0而不是NaN。

由于Ruby 1.9.3有一个常量来获得NaN值

Float::NAN => NaN 

如果你需要testing一个数字是否是NaN,你可以使用#nan? 在上面:

 ruby-1.8.7-p352 :008 > (0/0.0).nan? #=> true ruby-1.8.7-p352 :009 > (0/1.0).nan? #=> false 

最简单的方法是使用0.0 / 0.0 。 “NaN”.to_f不起作用, 在这个主题中有一些讨论为什么。

0.0 / 0.0在ruby1.8.6上适合我。

Pesto链接的线程具有这个function,这个function应该在浮点数按照IEEE 754标准实现的平台上工作:

 def aNaN s, e, m = rand(2), 2047, rand(2**52-1)+1 [sprintf("%1b%011b%052b", s,e,m)].pack("B*").unpack("G").first end 

在Rails中分配一个variables可以这样做(对unit testing有用):

 o.amount = BigDecimal.new('NaN') expect(o.valid?).to be false