2011-09-21 3 views
2

나는 결과는 0.06입니다 간단한 수학 연산을 몇 분 전에루비 - 수학 연산

<%=((3+2+1)/100).round(8)%> 

을 시도했지만 루비 코드의 결과는 위의 0.0입니다. 그 결과는 0.060000이되어야합니다.

왜 안 되니? 분할 정수이기 때문에 감사

답변

6
(3+2+1)/100 

0입니다. 당신은 /의 두 인수가 정수 경우, 분할의 결과는 정수 (전체 부분)이며, 참조

(3+2+1)/100.0 

보십시오. 인수 중 하나 이상이 부동 소수점이면 결과도 부동 소수점입니다.

+1

가장 가까운 정수로 내림 것 같은

또한 또 다른 옵션은 FDIV이며, 0을 반환합니다. 6.fdiv (100) # => 0.06 – steenslag

+0

@steenslag : 루비에 대해서조차 모르겠다. :) 나는 내 대답이 내가 아는 모든 언어에서 사실이라는 것이다. :) –

+0

@Armen Tsirunyan : 혹시 Perl, awk, Haskell에 대해 들어 보셨습니까? ;-) –

2

정수 데이터 만 관련된 작업은 정수로 수행 한 다음 6/1000입니다. 0을 나중에 float (round)으로 변환해도 이미 버려진 소수 부분은 복원되지 않습니다.

두 값 중 하나를 부동 (예 : 3.0)로 변경하면 완료됩니다.

4

두려운 정수 연산이 다시 공격됩니다!

(3 + 2 + 1)/100을 계산할 때 모든 피연산자는 정수이므로 Ruby는 부동 소수점 산술 대신 정수 계산을 사용합니다. 당신은 7/100을 할 경우는 0