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
NaN
是Float
实例。 使用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)