반응형
루비의 나눗셈이 십진수 값이 아닌 정수를 반환하는 이유는 무엇입니까?
예:
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
반응형
'programing' 카테고리의 다른 글
유형 스크립트:튜플 유형에서 항목 제거 (0) | 2023.07.15 |
---|---|
R의 축 레이블 회전 (0) | 2023.07.10 |
경로 전환 시 Vuex 재설정 저장소 변수 (0) | 2023.07.10 |
ASP의 사용자 지정 인증입니다.넷코어 (0) | 2023.07.10 |
각도를 사용하여 배열의 객체 인덱스를 가져오려면 어떻게 해야 합니까? (0) | 2023.07.10 |