防止 FloatDomainError NaN

Joh*_*ith 2 ruby ruby-on-rails exception

在此计算中:

months = (saved_cents / spend_cents).to_f.floor
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

FloatDomainError: NaN
Run Code Online (Sandbox Code Playgroud)

我认为saved_centsspend_cents是浮点数,这就是为什么我不明白为什么会出现此错误。

导致此错误的原因可能是什么?我该如何解决它?

Ste*_*fan 5

根据文档,aFloatDomainError是:

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

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

saved_cents = 0.0
spend_cents = 0.0

(saved_cents / spend_cents).floor
#=> FloatDomainError: NaN
Run Code Online (Sandbox Code Playgroud)

因为零除以零是NaN

saved_cents / spend_cents
#=> NaN
Run Code Online (Sandbox Code Playgroud)

尽管NaN是一个浮点数,但尝试向其发送floor消息会导致该错误:

Float::NaN.floor
#=> FloatDomainError: NaN
Run Code Online (Sandbox Code Playgroud)

导致此错误的原因可能是什么?我该如何解决它?

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