防止FloatDomainError NaN

时间:2017-08-14 12:52:45

标签: ruby-on-rails ruby exception

在此计算中:

months = (saved_cents / spend_cents).to_f.floor

我收到以下错误:

FloatDomainError: NaN

我认为saved_centsspend_cents是花车,这就是为什么我不明白为什么会收到此错误。

出现此错误的原因是什么?我该如何解决?

1 个答案:

答案 0 :(得分:2)

根据文档,FloatDomainError是:

  

尝试将特殊浮点值(特别是InfinityNaN)转换为不支持它们的数字类时引发。

在您的代码中,当两个值均为零时,会出现FloatDomainError

saved_cents = 0.0
spend_cents = 0.0

(saved_cents / spend_cents).floor
#=> FloatDomainError: NaN

因为零除以零是NaN

saved_cents / spend_cents
#=> NaN

虽然NaN是浮点数,但尝试向其发送floor消息会导致该错误:

Float::NaN.floor
#=> FloatDomainError: NaN
  

出现此错误的原因是什么?我该如何解决?

仔细检查您的输入。也许还有另一个错误,它会将值意外设置为0.0