Why is division in Ruby returning an integer instead of decimal value?
例如:
1 | 9 / 5 #=> 1 |
但我期待
它正在进行整数除法。您可以使用
1 2 | 9.to_f / 5 #=> 1.8 9 / 5.to_f #=> 1.8 |
如果您的值是变量而不是文字,这也适用。将一个值转换为float足以将整个表达式强制转换为浮点运算。
它正在进行整数除法。您可以通过添加
1 2 | 9.0 / 5 #=> 1.8 9 / 5.0 #=> 1.8 |
还有
1 | 9.fdiv(5) #=> 1.8 |
你可以用irb检查它:
1 2 3 4 5 6 7 | $ irb >> 2 / 3 => 0 >> 2.to_f / 3 => 0.666666666666667 >> 2 / 3.to_f => 0.666666666666667 |
您可以包含ruby
1 | require 'mathn' |
通过这种方式,您将能够正常进行划分。
1 2 3 4 | 1/2 #=> (1/2) (1/2) ** 3 #=> (1/8) 1/3*3 #=> 1 Math.sin(1/2) #=> 0.479425538604203 |
这样,您就可以获得精确的除法(类Rational),直到您决定应用不能表示为有理的操作,例如
将
这里没有提到Fixnum#to_r,它是从ruby 1.9开始引入的。它将Fixnum转换为合理的形式。以下是其用途的示例。只要使用的所有数字都是Fixnum,这也可以给出精确的除法。
1 2 3 4 5 | 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 |
在有理数上运算的浮点将结果转换为浮点的示例。
1 2 | a = 5.to_r #=> (5/1) a = a * 5.0 #=> 25.0 |