Ruby on rails RubyonRails中设计的突然理性结果
在IRB中进行除法时: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/
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
中删除,分区将正常工作。