为什么在Ruby中除法返回一个整数而不是十进制值?

例如:

9 / 5 #=> 1 

但我预计1.8 。 我怎样才能得到正确的十进制(非整数)结果? 为什么它返回1呢?

这是做整数除法。 您可以通过添加.0来使其中一个数字成为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 

如果你的值是variables而不是文字,这也适用。 将一个值转换为浮点数足以将整个expression式转换为浮点运算。

还有可以用来代替的Numeric#fdiv方法:

 9.fdiv(5) #=> 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类),直到您决定应用一个不能expression为理性的操作,例如Math.sin

5更改为5.0 。 你正在进行整数除法。

Fixnum#to_r在这里没有提到,它是从Ruby 1.9开始引入的。 它将Fixnum转换成合理的forms。 以下是其使用的例子。 只要使用的所有数字都是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