例えば:
9 / 5 #=> 1
しかし、私は期待してい1.8
ました。正しい 10 進数 (非整数) の結果を取得するにはどうすればよいですか? なぜそれ1
はまったく戻ってくるのですか?
例えば:
9 / 5 #=> 1
しかし、私は期待してい1.8
ました。正しい 10 進数 (非整数) の結果を取得するにはどうすればよいですか? なぜそれ1
はまったく戻ってくるのですか?
整数除算を行っています。を使用to_f
して、物事を強制的に浮動小数点モードにすることができます。
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
これは、値がリテラルではなく変数である場合にも機能します。式全体を強制的に浮動小数点演算にするには、1 つの値を float に変換するだけで十分です。
整数除算を行っています。Float
次を追加することで、数字の1つをaにすることができます.0
。
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
irb で確認できます。
$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667
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
。
をに変更5
し5.0
ます。整数除算を取得しています。
ここでは 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