박지훈.임프 님이 쓰신 글 :
: 알에스 님이 쓰신 글 :
: : float f;
: : int i = 35, j = 8;
: : f = (float)i / (float)j;
: : 하면 f = 4.375가 되는데 이때 결과를 소수점 2째자리에서
: : 반올림하여 4.38의 값을 갖고 싶으면 어떻게 합니까?
: :
:
:
:
: 임펠리테리입니다.
:
: 빌더에는 반올림을 지원하는 함수가 없는데, 더욱이 지금 원하시는 것처럼, 소숫점 아래 몇자리에서 반올림하는 그런 함수는... 아마도 다른 어떤 언어에도 없을겁니다. ^^
:
: 간단히 하는 방법은 있습니다. 일단 0.005를 더하세요. 4.375 + 0.005 = 4.38
: 이 경우에는 그 이하 자리수가 없으므로 문제가 없습니다만, 만약 원래의 계산결과가 4.3753 등과 같이 그 이하 자리가 있다면 계산결가도 4.383과 같이 되므로 원하는 결과가 안되죠? 그럼, 여기다 100을 곱한 후 다시 100으로 나누어 정수형으로 강제 캐스팅을 하면 되겠습니다.
:
: 그럼 참고하시길...
순서가 약간 잘못 되었네요...^^
100을 곱한 후, 정수형으로 강제 캐스팅... 그리고 다시 100으로 나누기..
정수형 캐스팅을 나중에 하면 그냥 4가 나오지요.
임프님이 실수를....^^
근데여 정수형으로 강제 캐스팅한 다음에 또다시 float으로 강제 캐스팅해야 되거나
100이 아닌 100.으로 나누어야 할 것 같은데..
제가 귀찮아서 테스트를 안해 봤지만 얼마전 기억엔 그런것 같았거든요.
그러니까,
f = int(((float)i / j + 0.005)*100) / 100.;
or
f = int(100. * i / j + 0.5) / 100.;
맞나요?
|