[ruby] Ruby에서 나누기가 십진수 값 대신 정수를 반환하는 이유는 무엇입니까?
예를 들면 다음과 같습니다.
9 / 5 #=> 1
그러나 나는 기대했다 1.8
. 올바른 10 진수 (정수가 아닌) 결과를 얻으려면 어떻게해야합니까? 왜 1
전혀 돌아 오지 않습니까?
답변
정수 나누기를하고 있습니다. 다음 Float
을 추가 하여 숫자 중 하나를 만들 수 있습니다 .0
.
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
답변
정수 나누기를하고 있습니다. to_f
물건을 부동 소수점 모드로 강제 하는 데 사용할 수 있습니다 .
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 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
답변
루비 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
.
답변
변화 5
에를 5.0
. 정수 나누기를 얻습니다.
답변
Fixnum # to_r은 여기에 언급되지 않았으며 루비 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