Ruby on Rails中划分的突然理性结果

时间:2014-10-02 07:53:31

标签: ruby-on-rails types division rational-numbers

在IRB中做出决定时:

6/3600

结果始终为0.

但是在WEBrick或Apache / Passenger中运行的实时Rails应用程序中,相同的部门会生成类型1/600的{​​{1}}值。

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

两个参数都是Integer。

1 个答案:

答案 0 :(得分:1)

这与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之类的事情,反之亦然mathn加载(6/3600).to_i div()。明确划分的另一种方法是使用方法>> 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

这里是IRB会话的转储,这是上述文本的结论。

{{1}}

此处还讨论了此主题:https://bugs.ruby-lang.org/issues/2121