首页 文章

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

提问于
浏览
217

例如:

9 / 5  #=> 1

但我期待 1.8 . 如何获得正确的十进制(非整数)结果?为什么它会回归 1

7 回答

  • 33

    它正在进行整数除法 . 您可以通过添加 .0 将其中一个数字设为Float

    9.0 / 5  #=> 1.8
    9 / 5.0  #=> 1.8
    
  • 226

    它正在进行整数除法 . 您可以使用 to_f 强制进入浮点模式:

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

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

  • 318

    还有Numeric#fdiv方法,您可以使用它:

    9.fdiv(5)  #=> 1.8
    
  • 10

    你可以用irb检查它:

    $ irb
    >> 2 / 3
    => 0
    >> 2.to_f / 3
    => 0.666666666666667
    >> 2 / 3.to_f
    => 0.666666666666667
    
  • 155

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

  • 4

    5 更改为 5.0 . 你得到整数除法 .

  • 22

    这里没有提到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
    

相关问题