289

例えば:

9 / 5  #=> 1

しかし、私は期待してい1.8ました。正しい 10 進数 (非整数) の結果を取得するにはどうすればよいですか? なぜそれ1はまったく戻ってくるのですか?

4

7 に答える 7

388

整数除算を行っています。を使用to_fして、物事を強制的に浮動小数点モードにすることができます。

9.to_f / 5  #=> 1.8
9 / 5.to_f  #=> 1.8

これは、値がリテラルではなく変数である場合にも機能します。式全体を強制的に浮動小数点演算にするには、1 つの値を float に変換するだけで十分です。

于 2011-03-31T17:07:54.803 に答える
292

整数除算を行っています。Float次を追加することで、数字の1つをaにすることができます.0

9.0 / 5  #=> 1.8
9 / 5.0  #=> 1.8
于 2011-03-31T16:02:14.523 に答える
39

irb で確認できます。

$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667
于 2012-02-10T08:15:44.940 に答える
26

rubymathnモジュールを含めることができます。

require 'mathn'

これで普通に割り切れるようになります。

1/2              #=> (1/2)
(1/2) ** 3       #=> (1/8)
1/3*3            #=> 1
Math.sin(1/2)    #=> 0.479425538604203

このようにして、有理数として表現できない操作を適用することを決定するまで、正確な除算 (Rational クラス) を取得しますMath.sin

于 2013-11-23T12:30:15.637 に答える
11

をに変更55.0ます。整数除算を取得しています。

于 2011-03-31T16:01:22.520 に答える
6

ここでは Fixnum#to_r について触れていませんが、ruby 1.9 から導入されました。Fixnum を有理数形式に変換します。以下はその使用例です。これも、使用されるすべての数値が Fixnum である限り、正確な除算を与えることができます。

 a = 1.to_r  #=> (1/1) 
 a = 10.to_r #=> (10/1) 
 a = a / 3   #=> (10/3) 
 a = a * 3   #=> (10/1) 
 a.to_f      #=> 10.0

有理数で演算された float が結果を float に変換する例。

a = 5.to_r   #=> (5/1) 
a = a * 5.0  #=> 25.0 
于 2017-06-25T17:30:08.957 に答える