[ACCESS] Round 함수의 결과값 반환에 대한 이해.

 

 

 

몇일 전 Round함수가 잘못 작동하고 있다는 글을 포스팅하였다.

 

 

하지만  설마하니 Round같은 기초 함수를 설계하는데 버그를 낼리가 없을거라는 생각에 조금 더 조사를 해 보았더니 역시 이것은 의도된 것이었음을 알게 되었다.

그리고 그것이 보다 정확한 결과를 위해서 라는 것도..

 

 

 

이 글을 보니 단숨에 이해가 되었다.

 

 

요지는 이렇다.

 

정수 1개를 기준으로  0.1 ~ 0.9 까지 소수 9개가 반올림 대상 숫자가 된다.

0.1~0.4까지 4개의 소수는 내림 처리를 하게 되고

0.5~0.9까지 5개의 소수는 올림 처리를 하게 된다.

 

이렇게 되면 버려지는 숫자는 4개, 올려지는 숫자는 5개이므로 정수1개당  1/9만큼 불공평하게 나누어진다는 것이다.

살짝 표로 보자면..

 1.0

 2.0

 3.0

 4.0

 1.1 

 2.1

 3.1

 4.1

 1.2

 2.2

 3.2

 4.2

 1.3

 2.3

 3.3

 4.3

 1.4

 2.4

 3.4

 4.4

 1.5

 2.5

 3.5

 4.5

 1.6

 2.6

 3.6

 4.6

 1.7

 2.7

 3.7

 4.7

 1.8

 2.8

 3.8

 4.8

 1.9

 2.9

 3.9

 4.9

 

1.0~4.0까지 숫자 40개 중에서 변하지 않는 숫자는 4개이고

버려지는 숫자는 16개, 올려지는 숫자는 20개이다. 올려지는 숫자가 더 많다..

 

 

그럼 위 링크의 'Banker's Rounding'의 규칙을 적용해 본다면

 

 1.0

 2.0

 3.0

 4.0

 1.1 

 2.1

 3.1

 4.1

 1.2

 2.2

 3.2

 4.2

 1.3

 2.3

 3.3

 4.3

 1.4

 2.4

 3.4

 4.4

 1.5

 2.5

 3.5

 4.5

 1.6

 2.6

 3.6

 4.6

 1.7

 2.7

 3.7

 4.7

 1.8

 2.8

 3.8

 4.8

 1.9

 2.9

 3.9

 4.9

1.0~4.0까지 숫자 40개 중에서 변하지 않는 숫자는 똑같이 4개이고

버려지는 숫자는 18개올려지는 숫자도 18개이다.

 

 

실제로 여러 값의 반올림을 평균한다던지 하는 집계쪽에는 이 방법이  더 근사치와 가까워 질 것이 확실해 보인다.

하지만 개인의 성적을 처리할 경우에는 맞지 않는다. 97.5점을 받아도 98점이고, 98.5점을 받아도 98점이 되버리니..

 

여튼 이제껏 생각 못하고 그냥 마구잡이로 Round를 써왔는데 이번을 계기로 알게 되었으니 앞으로는 상황을 고려해 사용하도록 해야겠다.

+ Recent posts