2010-07-26 5 views
6

첫 번째 예제가 잘못된 결과를 인쇄하는 이유는 무엇입니까?Perl 모듈러스 연산자 질문

perl -le 'print $x = 100*1.15 % 5' 
4 
perl -le 'print $x = 1000*1.15 % 5' 
0 
+1

이것은 PHP에서도 발생합니다. 파이썬은 5.0 (yep, % 5 = 5.0)이라고 말합니다. – NullUserException

+0

@NullUserException : tnanks. 파이썬 쉘은 부동 소수점 연산의 결과를 테스트하기에 좋다 :-) –

+0

그래서 루비. 루비가 나에게 말한다 4.999999 – NullUserException

답변

9

부동 소수점 연산 때문입니다.

print $x = int(100*1.15); 

는 당신에게 114

5

반올림을 제공합니다. 컴퓨터는 실제 소수 자리를 완벽하게 표현할 수 없으므로 대략적인 수치입니다. 내 컴퓨터에서 perl -le 'print $x = (100*1.15)-115'은 결과가 -1.4210854715202e-14인데, 이는 100*1.15이 거의 비슷하지만 115는 아님을 의미합니다.