例如:
9 / 5 #=> 1
但我预计1.8
。如何获得正确的十进制(非整数)结果?为什么它又回来1
了?
例如:
9 / 5 #=> 1
但我预计1.8
。如何获得正确的十进制(非整数)结果?为什么它又回来1
了?
它正在做整数除法。您可以使用to_f
强制事物进入浮点模式:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
如果您的值是变量而不是文字,这也适用。将一个值转换为浮点数足以将整个表达式强制转换为浮点运算。
它正在做整数除法。Float
您可以通过添加以下数字来制作其中一个数字.0
:
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
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 类),直到您决定应用无法表示为有理数的运算,例如Math.sin
.
将 更改5
为5.0
。你得到整数除法。
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