관리 메뉴

드럼치는 프로그래머

[C/C++] 실수를 실수로 반올림 함수, 자릿수 지정; Round to Double Function 본문

★─Programing/☆─C | C++

[C/C++] 실수를 실수로 반올림 함수, 자릿수 지정; Round to Double Function

드럼치는한동이 2010. 3. 2. 18:05
C언어에서, double형 실수를, 지정한 자릿수만큼 반올림하는 방법입니다. 엑셀의 반올림 함수처럼 작동하는 것입니다.

지정한 자리수의 아래쪽 부분부터는 모두 00000...으로 채워집니다.

자릿수 인수를 0으로 지정하면, 소수점 이하가 모두 반올림되어 정수처럼 되지만, 진짜 정수형으로 변하는 것은 아닙니다.


참고로, 원래 printf() 함수로 출력하면 반올림이 되어 출력됩니다. 그런데 가끔 특정 소수점 이하의 소수부를 지워야 할 때가 있습니다. 그때 이 함수를 사용하면 적당합니다.

사용법은, roundXL(숫자, 자릿수) 입니다.

 

Round to Double: 실수로 반올림 소스


소스 파일명: example.cpp
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)


#include <stdio.h>
#include <stdlib.h> // itoa()
#include <string.h> // strcat()

double roundXL(double x, int digits);


int main(void) {

  printf("%f\n", roundXL(12.534567890, 0)); // 13.000000
  printf("%f\n", roundXL(12.534567890, 1)); // 12.500000
  printf("%f\n", roundXL(12.534567890, 2)); // 12.530000
  printf("%f\n", roundXL(12.534567890, 3)); // 12.535000

  printf("%f\n", roundXL(-0.64527, 4));     // -0.645300

  return 0;
}


double roundXL(double x, int digits) {
  char format[5 + 1] = "%.";
  char temp[2 + 1];
  char result[500 + 1];

  if (digits > 99) digits = 99; // 자릿수가 너무 크면 제한


  ///////////////////////////////////////////////////////////
  // sprintf 에서 사용할 "형식 지정자" 문자열 만들기
  // 소수점 몇째 자리까지 나타낼 것인가 하는 것
  itoa(digits, temp, 10); // 자릿수인 digits 를 10진수로, 문자열 temp 로 변환
  strcat(format, temp); strcat(format, "f"); // "%.3f" 이런 식으로 형식 지정자 생성


  ///////////////////////////////////////////////////////////
  // 본격적인 반올림 작업 시작
  sprintf(result, format, x); // x 를 digits(=format) 자리에서 반올림하여 문자열 result에 저장

  return atof(result); // 문자열 result 를, 숫자(실수)로 변환 후 반환
}



실수를 정수로 반올림 함수 소스: ▶▶ C언어 기초] 소수점 반올림 함수; Round To Int, roundToInt()


[참초] http://mwultong.blogspot.com/2007/04/c-round-to-double-function.html
Comments