코딩/기타 정보글

[C언어/C++] 소수점 개수(자리)지정 방법 정리

lee1201zxc 2024. 2. 12. 12:00
300x250

 

728x90

소수점 개수(자리, 범위) 지정 방법 정

 

 

코딩을 하거나 백준 문제를 풀거나 하다 보면

소수(실수)를 출력하는 경우가 생깁니다.

특히 소수점의 개수를 지정해줘야 하는 경우가 많이 생기는데

오늘은 그 방법을 한번 알아보겠습니다.

참고로 C언어, C++ 두 개 모두 방법을 알아볼 예정입니다.

가장 먼저 C언어에서 알아보겠습니다.

 

 

 

 

C언어

 

 

C언어에서는 출력 시 printf를 주로 사용하는데 이곳에서 바로 지정해 줄 수 있습니다.

printf, scanf는 입력, 출력 시 자료형을 직접 지정해 줘서 번거로운데

이 단점이 소수를 출력해 줄 때에는 장점이 됩니다.

 

아래 코드를 살펴봅시다.

#include<stdio.h>
int main(void)
{
	double a=123456.123456789;
	printf("%.9lf", a);
}

 

원래 출력할 때 "%lf"라고 하였는데 소수점 개수를 지정해 주려면

위 코드처럼 그냥  출력 시 % 뒤에  ".(숫자)"를 추가해 주면 됩니다.

'숫자'만큼 소수가 출력이 됩니다.

위의 예제에서는 소수 9개가 출력이 됩니다.

 

출력값

 

참고로 소수를 출력할 때에는 float 자료형보다 double 자료형이 더 좋습니다.

float 자료형은 범위가 좁아 오차가 생길 확률이 큽니다.

 

 

추가로 한 가지 알아야 할 점이 있는데

먼저 아래 코드를 봅시다.

#include<stdio.h>
int main(void)
{
	double a=123456.123456789;
	printf("%.8lf", a);
}

이 코드의 출력값은 아래와 같습니다.

출력값

 

보면 원래 소수점 아래 8번째 값은 원래 8인데 9가 출력이 되었습니다.

이는 반올림되었기 때문입니다.

8 다음 값은 9인데 이 값은 출력하지 않습니다. 대신에

반올림하는데 이용이 됩니다.

이점을 알아둡시다.

 

 

 

 

 

C++

 

C++에서 소수점 개수를 지정해 주려면

C언어보다는 조금 더 복잡합니다.

크게 두 가지 방법이 있습니다.

살펴봅시다.

 

 

fixed, precision 이용

 

 

아래 코드를 봅시다.

#include<iostream>
using namespace std;
int main()
{
    double a=123456.123456789;
    cout<<fixed;
    cout.precision(8);
    cout<<a;
}

 

출력값

 

 

cout<<fixed를 적은 다음

cout.precision(number)를 적습니다.

number가 출력하고 싶은 소수점 자릿수입니다.

그리고 이 방법도 C언어에서의 방법과 마찬가지로 반올림이 적용됩니다.

 

 

 

 

setprecision 이용

 

다음 방법은 setprecision을 이용한 방법입니다.

이를 사용하기 위해선 <iomanip> 라이브러리를 추가해야 합니다.

 

iomanip라이브러리 추가

 

그다음 setprecision함수를 사용하면 됩니다.

 

int main()
{
    double a=123456.123456789;
    cout<<setprecision(15);
    cout<<a;
}

위 코드의 출력값입니다.

출력값

 

setprecision 함수 안에 들어가는 수는

정수 + 소수 부분의 개수입니다.

double a의 값을 보면 정수 부분이 6자리, 소수 부분이 9자리여서

모두 출력하려면 setprecision(15)를 해줘야 합니다.

 

 

아래 백준 문제를 풀어보면서 오늘 배운 내용을 익혀봅시다.

 

 

 

백준 1008 : A/B(브론즈 5)

 

 

 

이상 소수점 개수 지정 방법에 대하여 알아보았습니다.

 

 

728x90