Ruby on rails RubyonRails中设计的突然理性结果

Ruby on rails RubyonRails中设计的突然理性结果,ruby-on-rails,types,division,rational-numbers,Ruby On Rails,Types,Division,Rational Numbers,在IRB中进行除法时: 6/3600 结果总是0 但是在WEBrick或Apache/Passenger中运行的live Rails应用程序中,相同的划分会导致1/600类型Rational的值 在RubyMine 6.3.3中对断点手表进行除法时,我得到了相同的理性结果 两个参数都是整数。这与mathn模块有关。出于某种原因,它没有加载到IRB中,但它是由服务器会话中的某个东西加载的,可能还来自RubyMine调试会话中的调试gem 您的行为记录如下: 您可以在IRB会话中对此进行测试6/

在IRB中进行除法时:

6/3600
结果总是0

但是在WEBrick或Apache/Passenger中运行的live Rails应用程序中,相同的划分会导致
1/600
类型
Rational
的值

在RubyMine 6.3.3中对断点手表进行除法时,我得到了相同的理性结果


两个参数都是整数。

这与
mathn
模块有关。出于某种原因,它没有加载到IRB中,但它是由服务器会话中的某个东西加载的,可能还来自RubyMine调试会话中的调试gem

您的行为记录如下:

您可以在IRB会话中对此进行测试<代码>6/3600导致
0
。用
require'mathn'
加载
mathn
后,您会得到另一个结果。它将改为
(1/600)

您还可以强制每种情况,使您的代码在这一点上更加健壮。如果你想要一个合理的结果,你可以做一些类似于
6/3600.to\r
的事情,如果
mathn
被加载
(6/3600)。to\u 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

这里也讨论了这个话题:

谢谢你的提示。Mathn实际上替换了
Fixnum
Bignum
类的/division运算符,使其成为
quo
方法的别名。我在
geometry
ruby units
gems中发现了Mathn的用法。如果将它们从
Gemfile
中删除,分区将正常工作。