Tuesday, December 19, 2006
C언어] 실수, 정수부/소수부 구하기, 소수점 이하만 추출; Get FRACTIONAL PART Only
실수는 정수부(Integer Parts)와 소수부(Fractional Parts)로 이루어져 있습니다.
123.456789555 라는 실수에서
123 이 정수부이고
.456789555 가 소수부입니다. 정수부와 소수부를 분리하여 얻는 함수가
math.h 헤더 파일의
double modf(double x, double *ipart);
입니다. 소수부는 직접 반환하고, 정수부는 ipart 에 정수가 아닌 실수형으로 넣습니다.
파일명: 0.cpp
integer 변수에 정수부가 들어가는데 정수형이 아닌 실수형으로 들어갑니다. 그래서 %.f 이런 포맷 지정자를 사용하여 정수로 출력했습니다.
fraction 변수에는 소수부가 들어갑니다.
컴파일 및 실행 결과:
정수부와 소수부가 나누어졌습니다.
그런데 소수부가 그리 정밀하게 구해지지는 않았습니다.
다음과 같이 할 수도 있습니다:
▶▶ C언어] 소수점 이하 버리기, 실수를 정수로; float to int
123.456789555 라는 실수에서
123 이 정수부이고
.456789555 가 소수부입니다. 정수부와 소수부를 분리하여 얻는 함수가
math.h 헤더 파일의
double modf(double x, double *ipart);
입니다. 소수부는 직접 반환하고, 정수부는 ipart 에 정수가 아닌 실수형으로 넣습니다.
정수부/소수부 분리, 소수점 이하만 구하는 함수 예제: modf() Function Example
파일명: 0.cpp
#include <stdio.h>
#include <math.h>
int main(void) {
double integer, fraction;
double n = 123.456789555;
fraction = modf(n, &integer);
printf("%.9f = %.f + %.15f\n", n, integer, fraction);
return 0;
}
#include <math.h>
int main(void) {
double integer, fraction;
double n = 123.456789555;
fraction = modf(n, &integer);
printf("%.9f = %.f + %.15f\n", n, integer, fraction);
return 0;
}
integer 변수에 정수부가 들어가는데 정수형이 아닌 실수형으로 들어갑니다. 그래서 %.f 이런 포맷 지정자를 사용하여 정수로 출력했습니다.
fraction 변수에는 소수부가 들어갑니다.
컴파일 및 실행 결과:
D:\Z>cl /nologo 0.cpp && 0.exe
0.cpp
123.456789555 = 123 + 0.456789555000000
D:\Z>
0.cpp
123.456789555 = 123 + 0.456789555000000
D:\Z>
정수부와 소수부가 나누어졌습니다.
그런데 소수부가 그리 정밀하게 구해지지는 않았습니다.
modf 함수 없이, 실수에서 소수부 구하기
다음과 같이 할 수도 있습니다:
#include <stdio.h>
int main(void) {
double n = 123.456789555;
printf("%.9f = %d + %.15f\n", n, (int) n, n - (int) n);
return 0;
}
int main(void) {
double n = 123.456789555;
printf("%.9f = %d + %.15f\n", n, (int) n, n - (int) n);
return 0;
}
▶▶ C언어] 소수점 이하 버리기, 실수를 정수로; float to int
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home