在IRB中做出决定时:
6/3600
结果始终为0.
但是在WEBrick或Apache / Passenger中运行的实时Rails应用程序中,相同的部门会生成类型1/600
的{{1}}值。
我在RubyMine 6.3.3中的断点监视中进行除法时获得相同的Rational结果
两个参数都是Integer。
答案 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