0

私は持っています:

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 

resultなりたい0.25。どうすればこれを実現できますか?

強制interim_result.classする必要がある/可能integerですか?

次の場合、0.25という望ましい結果が得られないことに注意してください。

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

ありがとう。

4

3 に答える 3

3

はい、最も簡単な方法は、値を に代入するto_f代わりに呼び出すことです。to_iinterim_result

于 2011-07-19T11:44:36.603 に答える
0

整数のように振る舞うという意味がよくわかりません。それが完全に正しい場合、小数点以下は何もありません。ただし、使用round()して目的を達成できると思います。

 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 > 
于 2011-07-19T11:54:34.193 に答える
0

あなたの例で何がうまくいかないのか、ちょっとした説明です。

interim_result は正しい 256. そして、これが起こります:

256 / 1024 #-> 0

/ 2 つの fixnums (整数) はモジュラ除算の一種です。それを表示するには: 次の最初の値を取得します。

256.divmod(1024)#-> [0, 256]
256.divmod(1024).first #-> 0

いくつかの解決策 (入力値を変更しました。256 / 1028 は 0.25 ではなく、24.9 ..... Codeglots の回答を参照してください):

256 / 1024.0 #-> 0.25

おそらく、Rational はもう 1 つの優れたソリューションです。

256 / Rational(1024,1) #-> (1/4)
256 * Rational(1,1024) #-> (1/4)
于 2011-07-19T14:27:11.267 に答える