Erw*_*inM 245 ruby math floating-point division integer-division
例如:
9 / 5 #=> 1
Run Code Online (Sandbox Code Playgroud)
但我期待1.8
.如何获得正确的十进制(非整数)结果?为什么它会回归1
?
mu *_*ort 340
它正在进行整数除法.您可以使用to_f
强制事物进入浮点模式:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
Run Code Online (Sandbox Code Playgroud)
如果您的值是变量而不是文字,这也适用.将一个值转换为float足以将整个表达式强制转换为浮点算术.
小智 254
它正在进行整数除法.您可以Float
通过添加.0
以下内容来创建其中一个数字:
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
Run Code Online (Sandbox Code Playgroud)
Kon*_*che 167
还有Numeric#fdiv
一种方法可以使用:
9.fdiv(5) #=> 1.8
Run Code Online (Sandbox Code Playgroud)
Ren*_*aud 39
你可以用irb检查它:
$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667
Run Code Online (Sandbox Code Playgroud)
Rok*_*alj 26
您可以包含ruby mathn
模块.
require 'mathn'
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您将能够正常进行划分.
1/2 #=> (1/2)
(1/2) ** 3 #=> (1/8)
1/3*3 #=> 1
Math.sin(1/2) #=> 0.479425538604203
Run Code Online (Sandbox Code Playgroud)
这样,您就可以获得精确的除法(类Rational),直到您决定应用不能表示为有理的操作为止Math.sin
.
这里没有提到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
Run Code Online (Sandbox Code Playgroud)
以有理数运算的浮点数会将结果隐蔽为浮点数的示例。
a = 5.to_r #=> (5/1)
a = a * 5.0 #=> 25.0
Run Code Online (Sandbox Code Playgroud)