289

例如:

9 / 5  #=> 1

但我预计1.8。如何获得正确的十进制(非整数)结果?为什么它又回来1了?

4

7 回答 7

388

它正在做整数除法。您可以使用to_f强制事物进入浮点模式:

9.to_f / 5  #=> 1.8
9 / 5.to_f  #=> 1.8

如果您的值是变量而不是文字,这也适用。将一个值转换为浮点数足以将整个表达式强制转换为浮点运算。

于 2011-03-31T17:07:54.803 回答
292

它正在做整数除法。Float您可以通过添加以下数字来制作其中一个数字.0

9.0 / 5  #=> 1.8
9 / 5.0  #=> 1.8
于 2011-03-31T16:02:14.523 回答
185

Numeric#fdiv您还可以使用以下方法:

9.fdiv(5)  #=> 1.8
于 2013-10-24T02:53:32.370 回答
39

您可以使用 irb 进行检查:

$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667
于 2012-02-10T08:15:44.940 回答
26

您可以包含 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.

于 2013-11-23T12:30:15.637 回答
11

将 更改55.0。你得到整数除法。

于 2011-03-31T16:01:22.520 回答
6

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 
于 2017-06-25T17:30:08.957 回答