관리 메뉴

History

[c언어] 소숫점 반올림(첫째, 둘째... 자리) 본문

C,C++/개념 실습 프로그래밍

[c언어] 소숫점 반올림(첫째, 둘째... 자리)

luckybee 2023. 10. 24. 16:34
728x90
반응형

c언어에서는 올림(ceil)과 내림(floor) 함수는 지원하지만 반올림 함수는 따로 지원하지 않는다.

 

ceil과 floor함수는 math.h를 include 해줘야 사용할 수 있는 라이브러리 함수이다. 

 

float data1=1.75452;
float data2=0.1353;

위처럼 float형 data1과 data2라는 변수를 선언하고 초기화한다.

 

data1을 기준으로 ceil을 사용하면 2.000000이 나올 것이고 floor을 하면 1.000000이 나온다.

 

난 floor을 활용하여 반올림을 간단하게 구현해보도록 하겠다.

 

#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)

int main()
{
	float data1=1.75452;
	float data2=0.1353;

	data1 = floor(data1 + 0.5);
	data2 = floor(data2 + 0.5);
	printf("소수 반올림\n");
	printf("data1: %.3f\ndata2: %.3f\n", data1, data2);
 	return 0;
}

위와 같이 코드를 작성하면 0.5를 더한 후 내림을 진행하기 때문에 기존 소수점이 반올림 기준 (0.5 이상)이 되면 정수 부분이 바뀔 것이다.

 

그러면 소숫점 1번째 자리에서 반올림을 하는 방법은 어떻게 해야 할까?

 

방법은 아래와 같다.

 

#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)

int main()
{
	float data1=1.75452;
	float data2=0.1353;

	data1 = floor(data1 + 0.5);
	data2 = floor(data2 + 0.5);
	printf("소수 반올림\n");
	printf("data1: %.3f\ndata2: %.3f\n", data1, data2);
    
    
	data1 = 1.75452;
	data2 = 0.1353;
	data1 = (floor((data1 * 10) + 0.5)) / 10;  
    //계산과정: 17.5452+0.5= 18.0452 ->(floor)내림->18.000 /10= 1.800

	data2 = floor(((data2 * 10) + 0.5)) / 10; 
    //계산과정: 1.353+0.5= 1.853->(floor)내림->1.000 /10= 0.100
	
    printf("소수 첫째자리 반올림\n");
	printf("data1: %.3f\ndata2: %.3f\n", data1, data2);
    
 	return 0;
}

주석처럼 계산과정을 거친 후 floor을 통해 내림을 진행하면 원하는 값이 나온다.

 

마지막으로  소숫점 2번째 자리에서 반올림을진행해 보겠다. 코드는 아래와 같다.

#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)

int main()
{
	float data1=1.75452;
	float data2=0.1353;

	data1 = floor(data1 + 0.5);
	data2 = floor(data2 + 0.5);
	printf("소수 반올림\n");
	printf("data1: %.3f\ndata2: %.3f\n", data1, data2);
    
    
	data1 = 1.75452;
	data2 = 0.1353;
	data1 = (floor((data1 * 10) + 0.5)) / 10;  

	data2 = floor(((data2 * 10) + 0.5)) / 10; 
	printf("소수 첫째자리 반올림\n");
	printf("data1: %.3f\ndata2: %.3f\n", data1, data2);
    
    data1 = 1.75452;
	data2 = 0.1353;

	data1 = (floor((data1 * 100) + 0.5)) / 100; 
    //계산과정: 175.452+0.5= 175.952 ->(floor)내림-> 175.000 /100= 1.750

	data2 = floor(((data2 * 100) + 0.5)) / 100; 
    //계산과정: 13.53+0.5= 14.03 ->(floor)내림->14.00 /10= 1.400
	printf("소수 둘째자리 반올림\n");
	printf("data1: %.3f\ndata2: %.3f\n", data1, data2);
    
 	return 0;
}

 

 

아래는 실행화면이다. 결과값이 수기로 계산한 값과 동일하게 출력이 되었다.

728x90
반응형
Comments