我怎样才能强迫Ruby数字表现得像整数,而不是fixnums?

我怎样才能强迫Ruby数字表现得像整数,而不是fixnums?,ruby,math,integer,fixnum,Ruby,Math,Integer,Fixnum,我有: 我希望result为0.25。我怎样才能做到这一点 是否有必要/可能强制中间结果.class为整数 请注意,以下未给出0.25的预期结果: steven$ irb ruby-1.9.2-p180 :001 > foo = "256MB" => "256MB" ruby-1.9.2-p180 :002 > interim_result = foo.slice(/\d+/).to_i => 256 ruby-1.9.2-p180 :003 > inter

我有:

我希望
result
0.25
。我怎样才能做到这一点

是否有必要/可能强制
中间结果.class
整数

请注意,以下未给出0.25的预期结果:

steven$ irb
ruby-1.9.2-p180 :001 > foo = "256MB"
 => "256MB" 
ruby-1.9.2-p180 :002 > interim_result = foo.slice(/\d+/).to_i
 => 256 
ruby-1.9.2-p180 :003 > interim_result.class
 => Fixnum 
ruby-1.9.2-p180 :004 > result = interim_result/1028
 => 0 

谢谢。

是的,在为
临时结果
赋值时,最简单的方法是调用
到f
而不是
到i

是的,最简单的方法是在为
临时结果
赋值时,调用
到f
而不是
到i

我不知道你的意思是什么,你的行为就像一个整数。如果这完全是真的,那么小数点后你将一无所获;但是,我相信您可以使用
round()
来实现您想要的

ruby-1.9.2-p180 :002 > interim_result = foo.slice(/\d+/).to_f
 => 256.0 
ruby-1.9.2-p180 :003 > result = interim_result/1028
 => 0.2490272373540856 
ruby-1.9.2-p180 :004 > result.round_to(2)
NoMethodError: undefined method `round_to' for 0.2490272373540856:Float

我不确定你的意思,你的行为就像一个整数。如果这完全是真的,那么小数点后你将一无所获;但是,我相信您可以使用
round()
来实现您想要的

ruby-1.9.2-p180 :002 > interim_result = foo.slice(/\d+/).to_f
 => 256.0 
ruby-1.9.2-p180 :003 > result = interim_result/1028
 => 0.2490272373540856 
ruby-1.9.2-p180 :004 > result.round_to(2)
NoMethodError: undefined method `round_to' for 0.2490272373540856:Float

只是稍微解释一下你的例子中出了什么问题

临时结果是正确的。发生这种情况的原因是:

 ruby-1.9.2-p180-mri :001 > a = 0.2490272373540856 
 => 0.2490272373540856 
 ruby-1.9.2-p180-mri :002 > a.round(2)
 => 0.25 
 ruby-1.9.2-p180-mri :003 > 
/有两个固定数(整数)是一种模除法。 要显示它:您将获得以下值的第一个值:

256 / 1024 #-> 0
一些解决方案(我更改了您的输入值。您的256/1028不是0.25,而是24.9…..请参阅Codeglots答案):

也许Rational是另一个很好的解决方案:

256 / 1024.0 #-> 0.25

只是稍微解释一下你的例子中出了什么问题

临时结果是正确的。发生这种情况的原因是:

 ruby-1.9.2-p180-mri :001 > a = 0.2490272373540856 
 => 0.2490272373540856 
 ruby-1.9.2-p180-mri :002 > a.round(2)
 => 0.25 
 ruby-1.9.2-p180-mri :003 > 
/有两个固定数(整数)是一种模除法。 要显示它:您将获得以下值的第一个值:

256 / 1024 #-> 0
一些解决方案(我更改了您的输入值。您的256/1028不是0.25,而是24.9…..请参阅Codeglots答案):

也许Rational是另一个很好的解决方案:

256 / 1024.0 #-> 0.25

没有人能做对不起。刚刚更新了问题以显示走那条路线的结果。它告诉你没有方法
round\u to
,你甚至没有试着看看是否有其他方法来绕行<代码>>>结果。四舍五入(2)#=>0.25。哦,没错。我读得太快了。这很好用。没有人能做对不起。刚刚更新了问题以显示走那条路线的结果。它告诉你没有方法
round\u to
,你甚至没有试着看看是否有其他方法来绕行<代码>>>结果。四舍五入(2)#=>0.25。哦,没错。我读得太快了。这很好用。