나는 결과는 0.06입니다 간단한 수학 연산을 몇 분 전에루비 - 수학 연산
<%=((3+2+1)/100).round(8)%>
을 시도했지만 루비 코드의 결과는 위의 0.0입니다. 그 결과는 0.060000이되어야합니다.
왜 안 되니? 분할 정수이기 때문에 감사
나는 결과는 0.06입니다 간단한 수학 연산을 몇 분 전에루비 - 수학 연산
<%=((3+2+1)/100).round(8)%>
을 시도했지만 루비 코드의 결과는 위의 0.0입니다. 그 결과는 0.060000이되어야합니다.
왜 안 되니? 분할 정수이기 때문에 감사
(3+2+1)/100
는 0
입니다. 당신은 /
의 두 인수가 정수 경우, 분할의 결과는 정수 (전체 부분)이며, 참조
(3+2+1)/100.0
보십시오. 인수 중 하나 이상이 부동 소수점이면 결과도 부동 소수점입니다.
정수 데이터 만 관련된 작업은 정수로 수행 한 다음 6/100
은 0
입니다. 0
을 나중에 float (round
)으로 변환해도 이미 버려진 소수 부분은 복원되지 않습니다.
두 값 중 하나를 부동 (예 : 3.0
)로 변경하면 완료됩니다.
두려운 정수 연산이 다시 공격됩니다!
(3 + 2 + 1)/100을 계산할 때 모든 피연산자는 정수이므로 Ruby는 부동 소수점 산술 대신 정수 계산을 사용합니다. 당신은 7/100을 할 경우는 0
가장 가까운 정수로 내림 것 같은
또한 또 다른 옵션은 FDIV이며, 0을 반환합니다. 6.fdiv (100) # => 0.06 – steenslag
@steenslag : 루비에 대해서조차 모르겠다. :) 나는 내 대답이 내가 아는 모든 언어에서 사실이라는 것이다. :) –
@Armen Tsirunyan : 혹시 Perl, awk, Haskell에 대해 들어 보셨습니까? ;-) –