我注意到我的生产应用程序日志中出现了一个奇怪的错误:
ActionView::Template::Error (Infinity): /path/to/page/with/problem
/myapp/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/core_ext/float/rounding.rb:16:in `round'
/myapp/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/core_ext/float/rounding.rb:16:in `round'
/myapp/shared/bundled_gems/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/core_ext/float/rounding.rb:14:in `round'
/myapp/current/path/to/file/with/problem.rb:106:in `my_buggy_method'
在代码中有这样的东西:
def my_buggy_method
(number1 - number2).round(2)
end
我没有任何关于触发此错误的数字的见解。如何重构我的代码以避免此错误?
更新:我设法在生产中启动Rails控制台并跟踪上述方法中使用的值:
number1 == Infinity
number2 == 0
更新:经过进一步调查,由于除以零,number1返回Infinity
:
number1 == 113 / 0.0
现在我知道Infinity
来自何处,我会添加一张支票,以确保我永远不会被零除。
答案 0 :(得分:2)
此错误的原因是尝试round
或显示Infinity
。我没想到这个号码,所以我添加了额外的检查,以确保我不会通过除以零来创建Infinity
。