例如:
9 / 5 #=> 1
但我期待 1.8 . 如何获得正确的十进制(非整数)结果?为什么它会回归 1 ?
1.8
1
它正在进行整数除法 . 您可以通过添加 .0 将其中一个数字设为Float:
.0
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
如果您的值是变量而不是文字,这也适用 . 将一个值转换为float足以将整个表达式强制转换为浮点运算 .
还有Numeric#fdiv方法,您可以使用它:
9.fdiv(5) #=> 1.8
你可以用irb检查它:
$ irb >> 2 / 3 => 0 >> 2.to_f / 3 => 0.666666666666667 >> 2 / 3.to_f => 0.666666666666667
您可以包含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
将 5 更改为 5.0 . 你得到整数除法 .
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
7 回答
它正在进行整数除法 . 您可以通过添加
.0
将其中一个数字设为Float:它正在进行整数除法 . 您可以使用
to_f
强制进入浮点模式:如果您的值是变量而不是文字,这也适用 . 将一个值转换为float足以将整个表达式强制转换为浮点运算 .
还有Numeric#fdiv方法,您可以使用它:
你可以用irb检查它:
您可以包含ruby
mathn
模块 .通过这种方式,您将能够正常进行划分 .
通过这种方式,您可以获得精确的除法(类Rational),直到您决定应用不能表示为有理的操作,例如
Math.sin
.将
5
更改为5.0
. 你得到整数除法 .这里没有提到Fixnum#to_r,它是从ruby 1.9开始引入的 . 它将Fixnum转换为合理的形式 . 以下是其用途的示例 . 只要使用的所有数字都是Fixnum,这也可以给出精确的除法 .
在有理数上运算的浮点将结果转换为浮点的示例 .