在 IRB 中进行划分时:
6/3600
结果始终为 0。
但是在运行在 WEBrick 或 Apache/Passenger 中的实时 Rails 应用程序中,相同的除法会产生1/600
type 的值Rational
。
在 RubyMine 6.3.3 的断点监视中进行除法时,我得到了相同的 Rational 结果
两个参数总是整数。
在 IRB 中进行划分时:
6/3600
结果始终为 0。
但是在运行在 WEBrick 或 Apache/Passenger 中的实时 Rails 应用程序中,相同的除法会产生1/600
type 的值Rational
。
在 RubyMine 6.3.3 的断点监视中进行除法时,我得到了相同的 Rational 结果
两个参数总是整数。
这与mathn
模块有关。由于某种原因,它没有加载到您的 IRB 中,但它是由服务器会话中的某些内容加载的,并且可能来自 RubyMine 调试会话中的调试 gem。
您所经历的行为记录在这里: http ://www.ruby-doc.org/stdlib-2.1.1/libdoc/mathn/rdoc/Numeric.html
您可以在 IRB 会话中对此进行测试。6/3600
结果0
。加载后mathn
,require 'mathn'
您会得到另一个结果。它将(1/600)
相反。
您还可以强制每种情况,以使您的代码此时更加健壮。如果无论如何你想要一个合理的结果,你可以做类似的事情6/3600.to_r
,反之亦然 if mathn
is loaded (6/3600).to_i
。另一种明确划分的方法是使用方法div()
。
这里是 IRB 会话的转储,这是上面文本的结论。
>> 6/3600
0
>> 6/3600.to_r
(1/600)
>> require 'mathn'
true
>> 6/3600
(1/600)
>> (6/3600).to_i
0
>> 6.div(3600)
0
此处也讨论了此主题:https ://bugs.ruby-lang.org/issues/2121