ruby在轨道上如何处理NaN

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

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

当百分比有NaN它返回false。

我在logging仪上做了一些改变

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

产量

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

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 

UPDATE

NaN也可以是BigDecimal一个实例 :

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

要么

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