- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Link
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[C/C++] 실수를 실수로 반올림 함수, 자릿수 지정; Round to Double Function 본문
★─Programing/☆─C | C++
[C/C++] 실수를 실수로 반올림 함수, 자릿수 지정; Round to Double Function
드럼치는한동이 2010. 3. 2. 18:05C언어에서, double형 실수를, 지정한 자릿수만큼 반올림하는 방법입니다. 엑셀의 반올림 함수처럼 작동하는 것입니다.
지정한 자리수의 아래쪽 부분부터는 모두 00000...으로 채워집니다.
자릿수 인수를 0으로 지정하면, 소수점 이하가 모두 반올림되어 정수처럼 되지만, 진짜 정수형으로 변하는 것은 아닙니다.
참고로, 원래 printf() 함수로 출력하면 반올림이 되어 출력됩니다. 그런데 가끔 특정 소수점 이하의 소수부를 지워야 할 때가 있습니다. 그때 이 함수를 사용하면 적당합니다.
사용법은, roundXL(숫자, 자릿수) 입니다.
소스 파일명: example.cpp
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
실수를 정수로 반올림 함수 소스: ▶▶ C언어 기초] 소수점 반올림 함수; Round To Int, roundToInt()
[참초] http://mwultong.blogspot.com/2007/04/c-round-to-double-function.html
지정한 자리수의 아래쪽 부분부터는 모두 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()
[참초] http://mwultong.blogspot.com/2007/04/c-round-to-double-function.html
'★─Programing > ☆─C | C++' 카테고리의 다른 글
[C/C++] CMap 사용 예제 (0) | 2011.06.13 |
---|---|
[C/C++] scanf %n과 sscanf (0) | 2011.05.23 |
[C/C++] 클래스에서 사용되는 static 멤버 변수 및 함수 (0) | 2010.01.05 |
[C/C++] 멤버 이니셜라이저(member initializer) (0) | 2010.01.04 |
[C/C++] fopen() 에 쓰이는 파일 오픈 모드 종류 (0) | 2009.11.30 |
Comments