web-dev-qa-db-ja.com

ruby on Rails NaNの扱い方

私は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
43
Paul Phoenix

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 [〜#〜]

NaNBigDecimalのインスタンスにすることもできます

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

または

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