1. ホーム
  2. ruby-on-rails

[解決済み] Ruby on RailsでNaNを処理する方法

2022-02-19 19:39:08

質問

に関するいくつかの投稿を読みました。 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

解決方法は?

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

アップデイト

NaN のインスタンスである可能性もあります。 BigDecimal :

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

または

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