41

同样 "NaN".to_f 返回 0 而不是 NaN。

4

5 回答 5

51

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

Float::NAN
=> NaN
于 2013-09-24T23:17:55.170 回答
31

如果您需要测试一个数字是否为 NaN,您可以使用#nan?它:

ruby-1.8.7-p352 :008 > (0/0.0).nan? #=> true 
ruby-1.8.7-p352 :009 > (0/1.0).nan? #=> false 
于 2012-01-04T10:41:05.223 回答
17

最简单的方法是使用0.0 / 0.0. "NaN".to_f 不起作用,并且在这个线程中有一些关于原因的讨论。

于 2009-04-30T19:41:39.967 回答
3

0.0 / 0.0在 ruby​​ 1.8.6 上为我工作。

Pesto 链接的线程具有此功能,该功能应在根据 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
于 2009-04-30T19:40:25.027 回答
0

这样就可以在 Rails 中分配一个变量(对单元测试很有用):

o.amount = BigDecimal.new('NaN')
expect(o.valid?).to be false
于 2014-08-01T09:36:36.780 回答