如何在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