例如:
9 / 5 #=> 1
但我期待1.8
。如何获得正确的十进制(非整数)结果?为什么它会回归1
?
答案 0 :(得分:326)
正在进行整数除法。您可以使用to_f
强制进入浮点模式:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
如果您的值是变量而不是文字,这也有效。将一个值转换为float足以将整个表达式强制转换为浮点运算。
答案 1 :(得分:244)
答案 2 :(得分:161)
还可以使用Numeric#fdiv
方法:
9.fdiv(5) #=> 1.8
答案 3 :(得分:36)
您可以使用irb:
进行检查$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667
答案 4 :(得分:25)
您可以添加ruby 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
。
答案 5 :(得分:10)
将5
更改为5.0
。你得到整数除法。
答案 6 :(得分:5)
这里没有提到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