1

在 IRB 中进行划分时:

6/3600

结果始终为 0。

但是在运行在 WEBrick 或 Apache/Passenger 中的实时 Rails 应用程序中,相同的除法会产生1/600type 的值Rational

在 RubyMine 6.3.3 的断点监视中进行除法时,我得到了相同的 Rational 结果

两个参数总是整数。

4

1 回答 1

1

这与mathn模块有关。由于某种原因,它没有加载到您的 IRB 中,但它是由服务器会话中的某些内容加载的,并且可能来自 RubyMine 调试会话中的调试 gem。

您所经历的行为记录在这里: http ://www.ruby-doc.org/stdlib-2.1.1/libdoc/mathn/rdoc/Numeric.html

您可以在 IRB 会话中对此进行测试。6/3600结果0。加载后mathnrequire 'mathn'您会得到另一个结果。它将(1/600)相反。

您还可以强制每种情况,以使您的代码此时更加健壮。如果无论如何你想要一个合理的结果,你可以做类似的事情6/3600.to_r,反之亦然 if mathnis 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

于 2014-10-02T09:39:07.933 回答