私はNaN
に関するいくつかの投稿を読みましたが、Ruby on Railsでそれを処理する方法がわかりませんでした。それがNaN
である場合、値をチェックしたいですZero(0)に置き換えたいと思います。
logger.info(".is_a? Fixnum #{percent.is_a? Fixnum}")
percentに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
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)