ruby on rails如何处理NaN

Pau*_*nix 43 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我已经阅读了一些有关帖子,NaN但没有弄清楚如何在Ruby on Rails中处理它.我想检查一个值,如果它是NaN我想要用零(0)替换它.我尝试了以下内容

logger.info(".is_a? Fixnum #{percent.is_a? Fixnum}")
Run Code Online (Sandbox Code Playgroud)

百分之百时,NaN它返回我的假.

我在记录器中做了一些改动

logger.info("Fixnum #{percent.is_a? Fixnum} percent #{percent}")
Run Code Online (Sandbox Code Playgroud)

产量

Fixnum false percent 94.44444444444444
Fixnum false percent NaN
Fixnum false percent 87.0
Run Code Online (Sandbox Code Playgroud)

fal*_*tru 91

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
Run Code Online (Sandbox Code Playgroud)

UPDATE

NaN也可以是以下的实例BigDecimal:

((nan.is_a?(Float) || nan.is_a?(BigDecimal)) && nan.nan?) ? 0 : nan
Run Code Online (Sandbox Code Playgroud)

要么

{Float::NAN => 0, BigDecimal::NAN => 0}.fetch(nan, nan)
Run Code Online (Sandbox Code Playgroud)

  • 它也被定义为常量:`Float :: NAN#=> Nan` (2认同)
  • 如果您正在使用标准库,那么`NaN`也可以是`BigDecimal`的实例. (2认同)