Saturday, April 07, 2007
C언어] 실수를 실수로 반올림 함수, 자릿수 지정; Round to Double Function
C언어에서, double형 실수를, 지정한 자릿수만큼 반올림하는 방법입니다. 엑셀의 반올림 함수처럼 작동하는 것입니다.
지정한 자리수의 아래쪽 부분부터는 모두 00000...으로 채워집니다.
자릿수 인수를 0으로 지정하면, 소수점 이하가 모두 반올림되어 정수처럼 되지만, 진짜 정수형으로 변하는 것은 아닙니다.
참고로, 원래 printf() 함수로 출력하면 반올림이 되어 출력됩니다. 그런데 가끔 특정 소수점 이하의 소수부를 지워야 할 때가 있습니다. 그때 이 함수를 사용하면 적당합니다.
사용법은, roundXL(숫자, 자릿수) 입니다.
소스 파일명: example.cpp
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
실수를 정수로 반올림 함수 소스: ▶▶ C언어 기초] 소수점 반올림 함수; Round To Int, roundToInt()
지정한 자리수의 아래쪽 부분부터는 모두 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 를, 숫자(실수)로 변환 후 반환
}
#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()
tag: cpp
C언어 | C/C++ (Visual C++)
If you wrote them in person you have a really warmest heart alike .................
<< Home