델파이 Round 함수 동작 방식 및 주의사항
델파이(및 일부 다른 프로그래밍 언어)에서 기본 Round
함수는 소수점 이하가 정확히 0.5인 경우, 우리가 흔히 생각하는 '무조건 올림' 방식을 사용하지 않습니다. 대신 '은행원 반올림(Banker's Rounding)' 이라는 규칙을 따릅니다.
주의: Round
함수에서 종종 예상과 다른 결과(오류로 인식될 수 있음)가 발생하는 것은 바로 이 은행원 반올림 규칙 때문입니다.
사용해야 할 PAS 유닛
uses SysUtils, Math;
은행원 반올림(Banker's Rounding) 규칙
- 소수점 이하가 0.5가 아닌 경우에는 일반적인 반올림 규칙(0.5 미만 버림, 0.5 초과 올림)을 따릅니다.
- 소수점 이하가 정확히 0.5인 경우, 결과값이 짝수가 되도록 반올림(또는 반내림)합니다.
Round
함수의 동작 예시
다음은 Round
함수가 은행원 반올림 규칙을 따르는 것을 보여주는 예시입니다.
var
r1, r2, r3, r4, r5, r6: Integer; // r5, r6 추가
begin
// 소수점 이하가 0.5가 아님 - 일반 반올림과 동일
r1 := Round(3.7); // 결과: 4
r2 := Round(3.3); // 결과: 3
// 소수점 이하가 정확히 0.5 - 은행원 반올림 적용
r3 := Round(3.5); // 결과: 4 (가장 가까운 짝수)
r4 := Round(4.5); // 결과: 4 (가장 가까운 짝수)
r5 := Round(5.5); // 결과: 6 (가장 가까운 짝수)
r6 := Round(6.5); // 결과: 6 (가장 가까운 짝수)
ShowMessage(Format('Round(3.7): %d', [r1])); // 4
ShowMessage(Format('Round(3.3): %d', [r2])); // 3
ShowMessage(Format('Round(3.5): %d', [r3])); // 4 <= 예상과 다를 수 있는 부분
ShowMessage(Format('Round(4.5): %d', [r4])); // 4 <= 예상과 다를 수 있는 부분
ShowMessage(Format('Round(5.5): %d', [r5])); // 6
ShowMessage(Format('Round(6.5): %d', [r6])); // 6 <= 예상과 다를 수 있는 부분
end;
일반적인 산술 반올림이 필요한 경우
소수점 이하가 정확히 0.5일 때 무조건 올림하는 일반적인 산술 반올림 규칙을 따르고 싶다면, Math
유닛의 SimpleRoundTo
또는 RoundTo
함수를 사용할 수 있습니다.
SimpleRoundTo(X, -2)
: 소수점 이하 첫째 자리에서 반올림하여 정수를 얻습니다 (일반 반올림).RoundTo(X, Digit)
: 지정된 자릿수(Digit)에서 반올림합니다. Digit=0이면 소수점 첫째 자리, Digit=-2이면 정수 등.
SimpleRoundTo
함수 예시 (일반 반올림)
uses Math; // SimpleRoundTo 사용 시 필요
var
sr1, sr2, sr3, sr4: Integer;
begin
// SimpleRoundTo(-2) 사용 - 0.5에서 일반 반올림 규칙 적용
sr1 := SimpleRoundTo(3.5, -2); // 결과: 4
sr2 := SimpleRoundTo(4.5, -2); // 결과: 5
sr3 := SimpleRoundTo(5.5, -2); // 결과: 6
sr4 := SimpleRoundTo(6.5, -2); // 결과: 7
ShowMessage(Format('SimpleRoundTo(3.5, -2): %d', [sr1])); // 4
ShowMessage(Format('SimpleRoundTo(4.5, -2): %d', [sr2])); // 5 <= Round와 다른 부분
ShowMessage(Format('SimpleRoundTo(5.5, -2): %d', [sr3])); // 6
ShowMessage(Format('SimpleRoundTo(6.5, -2): %d', [sr4])); // 7 <= Round와 다른 부분
end;
따라서 델파이에서 Round
함수의 동작은 오류가 아니라 의도된 은행원 반올림 방식이며, 일반적인 산술 반올림이 필요할 때는 Math
유닛의 함수들을 사용해야 합니다.
'코딩 이야기 > 델파이 코딩' 카테고리의 다른 글
델파이 Private, Public 접근 지정자 설명 및 예시 (0) | 2025.04.22 |
---|---|
델파이 구조체(Record) 설명 및 예시 (0) | 2025.04.22 |
델파이 숫자 함수 종류 및 예시 (0) | 2025.04.21 |
델파이 문자열 함수 종류 및 예시 (0) | 2025.04.21 |
델파이 문자열 포맷 함수 종류 및 예시 (0) | 2025.04.21 |