본문 바로가기
C Programming/예제 프로그램

[C Console] 실수의 소수점 이하 2자리를 정수로 출력하는 프로그램

by 희품 2019. 5. 18.
반응형

소수점 수치를 정수로 표시하기

프로그램은 함수의 집합으로 이루어져 있다고 볼 수 있습니다.

C 언어를 처음 배우시거나 다시 익히는 분들을 위해 일반적인 해결 방법(main 함수에 포함)과 어떤 알고리즘으로 동작하는지, 기능을 쉽게 파악하기 위해 함수로 분리한 방법 2가지로 구현하였으니 참고하시면 될 것 같습니다.

실수의 소수점을 추출해서 정수형 변수에 대입하는 프로그램

임의의 실수는 소수점을 가지고 있죠. 12.3456이라는 값은 정수부 12와 소수부 3456으로 나뉜다고 볼 수 있습니다.

이때, 3456 부분을 정수형 변수로 받아서 처리해야 되는 프로그램이 있습니다. 그 알고리즘을 구현해 보려고 합니다.

 

예제 프로그램이므로, 편의성 소수점 2자리까지만 정수로 추출하는 것으로 하겠습니다. 12.3456을 예로 들면, 34라는 정수 값을 추출하는 거죠.

 

입력은 C11 표준에 있는 scanf_s() 함수를 사용하였습니다.

 

1. 코드 및 설명(main 함수에 포함)
//==========================================================================
/**
* @brief	소수점 이하 2자리를 정수로 출력하는 프로그램

* @remark	임의의 실수에서 소수점 이하 두자리수만 추출하여
				정수형 변수에 대입하라.
				예를 들어 사용자로부터 입력받은 실수 f가 12.3456이라면
				34만 추출한다. 이때 반올림은 고려하지 않아도 상관없다.
*///========================================================================
#include <stdio.h>

int main(void)
{
	double nRealNum = 0;
	int nRet = 0;

	printf("실수를 입력하세요 : ");
	scanf_s("%lf", &nRealNum);
	if (nRealNum < 0)
	{
		nRealNum = -nRealNum;
	}

	nRealNum *= 100;
	nRet = (int)nRealNum % 100;

	printf("결과 : %d\n", nRet);

	return 0;
}

C언어에서 실수형 데이터를 정수형 데이터로 형 변환하는 특징을 이해하기 좋은 예제로 볼 수 있겠네요.

12.3456의 데이터에 100을 곱하면, 1234.56이 되고, 100으로 나눈 나머지의 정수 값은 34가 되는 거죠.

 

추가적인 부분은 음수일 때, 양수로 바꿔주어 곱하거나 나머지 계산 시, 의도하지 않은 동작을 방지하는 부분입니다.

2. 코드 확인(함수 구현)
#include <stdio.h>

//==========================================================================
/**
* @brief	소수점 이하 2자리를 정수로 출력하는 함수

* @remark	임의의 실수에서 소수점 이하 두자리수만 추출하여
				정수형 변수에 대입하라.
				예를 들어 사용자로부터 입력받은 실수 f가 12.3456이라면
				34만 추출한다. 이때 반올림은 고려하지 않아도 상관없다.

* @param	double dRealNum : [IN] 소수점 이하 추출할 실수 값

* @return	int : 반환할 소수점 이하 2자리 정수 값
*///========================================================================
int DecimalPointToInt(double dRealNum)
{
	int nRet = 0;
	if (dRealNum < 0)
	{
		dRealNum = -dRealNum;
	}

	dRealNum *= 100;
	nRet = (int)dRealNum % 100;

	return nRet;
}

//==========================================================================
/**
* @brief	Entry 함수(main)
* @return	int
*///========================================================================
int main(void)
{
	double fRealNum = 0;
	int nRet = 0;

	printf("실수를 입력하세요 : ");
	scanf_s("%lf", &fRealNum);

	nRet = DecimalPointToInt(fRealNum);
	printf("결과 : %d\n", nRet);

	return 0;
}

 

 

반응형