Delphi – RoundTo

Delphi의 RoundTo함수에 대해 알아봅니다.

Round와 RoundTo는 은행식 반올림을 사용합니다.
은행식 반올림이란 아래 예제와 같습니다.

12.4 rounds to  12
12.5 rounds to  12 // Round down to 짝수
12.6 rounds to  13
   
13.4 rounds to  13
13.5 rounds to  14 // Round up to 짝수
13.6 rounds to  14

은행식 반올림은 짝수에 맞추는 반올림 방식입니다.
일반적인 Round와는 다르게 RoundTo는 실수값을 Return합니다.

표현 
값 
RoundTo (1234567, 3)  
1235000  
RoundTo (1.234, -2)  
1.23  
RoundTo (1.235, -2)  
1.24  
RoundTo (1.245, -2)  
1.24  

차이점은 예제와 같이 뒤에 반올림할값을 정한다는 거죠.

만약 수학적인 반올림이 필요하다면 SimpleRoundTo를 이용하면 됩니다.

그런데, 실수를 Double형으로 선언하고
SimpleRoundTo(87.285, -2) => 87.29
but
x := 87.285; //double
SimpleRoundTo
(x, 2) => 87.28

이런 질문이 꽤 많습니다. 혹자는 델파이 버그라고까지 말합니다.
하지만 이는 컴퓨터의 실수형 표현방법을 모르는 분들이구요.
실제로는 실수는 그수에 무함이 가까운 수입니다. 따라서 컴퓨터의 내부에서는 다르게 표현됩니다.
참고로 델파이의 실수 값은 Simple, Double, extended등이 있습니다.
만약 소숫점을 정확히 표현하시고 싶은경우 Extended형을 사용하시거나 Currency형을 사용하시면 정확하게 표현이 가능합니다.
소수이하가 많이 필요하지 않는 경우에는 Currency형이 좋습니다.
단 extended형은 연산시에 아주 조금 느립니다. 속도에 크게 좌지우지 되지 않는다면 그냥 쓰세요.

참고만 하시길…

Author: yyjksw