例如:
9 / 5 #=> 1
但我期待1.8。我怎样才能得到正确的十进制(非整数)结果?它为什么返回1 ?
1.8
1
将5改为5.0。得到整数除法。
5
5.0
它在做整数除法。你可以通过添加.0使其中一个数字成为Float:
.0
Float
9.0 / 5 #=> 1.8 9 / 5.0 #=> 1.8
它在做整数除法。你可以使用to_f强制进入浮点模式:
to_f
9.to_f / 5 #=> 1.8 9 / 5.to_f #=> 1.8
如果您的值是变量而不是字面量,这也适用。将一个值转换为浮点数足以将整个表达式强制转换为浮点算术。
你可以通过irb查询:
$ irb >> 2 / 3 => 0 >> 2.to_f / 3 => 0.666666666666667 >> 2 / 3.to_f => 0.666666666666667
你也可以使用Numeric#fdiv方法:
Numeric#fdiv
9.fdiv(5) #=> 1.8
你可以包含ruby mathn模块。
mathn
require 'mathn'
这样,你就能正常地做除法了。
1/2 #=> (1/2) (1/2) ** 3 #=> (1/8) 1/3*3 #=> 1 Math.sin(1/2) #=> 0.479425538604203
通过这种方式,您可以得到精确的除法(类Rational),直到您决定应用一个不能表示为有理数的操作,例如Math.sin。
Math.sin
这里没有提到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
对有理数操作的浮点数将结果转换为浮点数的示例。
a = 5.to_r #=> (5/1) a = a * 5.0 #=> 25.0