48

私はいくつかの投稿を読みまし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
4

2 に答える 2

106

NaNのインスタンスですFloatFloat#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のインスタンスにすることもできますBigDecimal:

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

また

{Float::NAN => 0, BigDecimal::NAN => 0}.fetch(nan, nan)
于 2013-10-03T08:39:43.017 に答える