programing

루비의 나눗셈이 십진수 값이 아닌 정수를 반환하는 이유는 무엇입니까?

batch 2023. 7. 10. 22:12
반응형

루비의 나눗셈이 십진수 값이 아닌 정수를 반환하는 이유는 무엇입니까?

예:

9 / 5  #=> 1

하지만 나는 예상했습니다.1.8올바른 십진수(정수가 아닌) 결과를 얻으려면 어떻게 해야 합니까?왜 다시 돌아옵니까?1전혀?

정수 나눗셈을 하는 것입니다.사용할 수 있습니다.to_f부동 소수점 모드로 설정하기

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

이것은 값이 리터럴이 아닌 변수인 경우에도 작동합니다.하나의 값을 부동 소수점으로 변환하면 전체 식을 부동 소수점 산술로 강제 적용하기에 충분합니다.

정수 나눗셈을 하는 것입니다.다음을 추가하여 숫자 중 하나를 만들 수 있습니다..0:

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

대신 사용할 수 있는 방법도 있습니다.

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정수 나눗셈을 하고 있습니다.

픽스넘#to_r은 여기에 언급되지 않았습니다. 루비 1.9부터 도입되었습니다.픽스넘을 합리적인 형태로 변환합니다.다음은 사용 예입니다.이것은 또한 사용된 모든 숫자가 픽스넘인 한 정확한 나눗셈을 제공할 수 있습니다.

 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 

언급URL : https://stackoverflow.com/questions/5502761/why-is-division-in-ruby-returning-an-integer-instead-of-decimal-value

반응형