例えば:
9 / 5 #=> 1
しかし、私は1.8
を期待しました。 10進数(整数ではない)の正しい結果を得るにはどうすればいいですか?なぜそれが1
をまったく返さないのですか?
整数除算をしています。 .0
を追加することで、数字の1つを Float
にすることができます。
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
整数除算をしています。 to_f
を使用して、物事を強制的に浮動小数点モードにすることができます。
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
これはあなたの値がリテラルではなく変数である場合にも有効です。 1つの値をfloatに変換すると、式全体を浮動小数点演算に変換するのに十分です。
代わりに使用できる Numeric#fdiv
メソッドもあります。
9.fdiv(5) #=> 1.8
Irbで確認できます。
$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667
Rubyのmathn
モジュールを含めることができます。
require 'mathn'
このようにして、あなたは普通に分割をすることができるでしょう。
1/2 #=> (1/2)
(1/2) ** 3 #=> (1/8)
1/3*3 #=> 1
Math.sin(1/2) #=> 0.479425538604203
このようにして、Math.sin
のように、有理として表現できない演算を適用することを決定するまで、正確な除算(クラスRational)が得られます。
5
を5.0
に変更してください。あなたは整数除算を得ています。
Fixnum#to_rはここでは言及されていません。Ruby1.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
有理数を操作する浮動小数点数が、結果を浮動小数点数に変換する例。
a = 5.to_r #=> (5/1)
a = a * 5.0 #=> 25.0