ruby on rails如何处理NaN

时间:2013-10-03 08:34:45

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-3.1

我已经阅读了一些关于NaN的帖子,但没有弄清楚如何在Ruby on Rails中处理它。我想检查一个值,如果它是NaN我想用零(0)替换它。 我尝试了以下

logger.info(".is_a? Fixnum #{percent.is_a? Fixnum}")

当百分比为NaN时,它会返回false。

我在记录器中做了一些更改

logger.info("Fixnum #{percent.is_a? Fixnum} percent #{percent}")

输出

Fixnum false percent 94.44444444444444
Fixnum false percent NaN
Fixnum false percent 87.0

1 个答案:

答案 0 :(得分:89)

NaNFloat的实例。使用Float#nan?方法。

>> nan = 0.0/0 # OR nan = Float::NAN
=> NaN
>> nan.class
=> Float
>> nan.nan?
=> true
>> nan.is_a?(Float) && nan.nan?
=> true
>> (nan.is_a?(Float) && nan.nan?) ? 0 : nan
=> 0

<强>更新

NaN could also be an instance of BigDecimal

((nan.is_a?(Float) || nan.is_a?(BigDecimal)) && nan.nan?) ? 0 : nan

{Float::NAN => 0, BigDecimal::NAN => 0}.fetch(nan, nan)