我怎样才能强迫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。哦,没错。我读得太快了。这很好用。