본문 바로가기

알고리즘을 위한 간략 정리/입출력

[C++] 원하는 자리수까지 출력하기(반올림, 올림, 내림)

기본적인 반올림, 올림, 내림

  • 헤더 파일이 필요
  • 기본적으로 반올림은 round( 숫자 ), 올림은 ceil( 숫자 ), 내림은 floor( 숫자 )이다
  • 소숫점 1자리에서 진행된다.
#include <iostream>
#include <cmath>

using namespace std;

int main(){
    float num = 3.47;

    cout << round(num) << "\n";
    cout << ceil(num) << "\n";
    cout << floor(num) << "\n";
}

[출력]

3
4
3

소숫점 n자리에서의 반올림, 올림, 내림

  • 자리수를 조정하여 다음 함수를 이용하고, 다시 자릿수를 원래대로 놓아주면 된다.

예를 들어 소숫점 2번째 자리에서 반올림/올림/내림을 하려면,
10을 곱한 후에 다음 함수들을 이용하고, 다시 10으로 나눠서 반환하면 된다.

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    float num = 3.47;

    float num1 = round(10 * num) / 10;
    float num2 = ceil(10 * num) / 10;
    float num3 = floor(10 * num) / 10;


    cout << num1 << "\n";
    cout << num2 << "\n";
    cout << num3 << "\n";
}

[출력]

3.5
3.5
3.4

하지만, 다음 함수들은 소숫점이 0이면 따로 0을 표시하지 않는다!

num에 3.06을 넣어보면

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    float num = 3.06;

    float num1 = round(10 * num) / 10;
    float num2 = ceil(10 * num) / 10;
    float num3 = floor(10 * num) / 10;


    cout << num1 << "\n";
    cout << num2 << "\n";
    cout << num3 << "\n";
}

[출력]

3.1
3.1
3

그렇다면 3 이 아닌, 3.0이 표시되기 위해서는 어떻게 해야할까?

fixed 와 precision을 이용할 수 있다!

precision, fixed

  1. precision은 n개의 숫자만 나타내는 함수이고 (자동으로 반올림이 된다.)
  2. fixed는 소숫점을 고정시키는 함수이다.

소숫점을 고정시킨 후(fixed), precision을 하면 소숫점 n자리 까지 표시할 것을 명령한다. (이 때도 자동으로 반올림이 되므로 올림/내림 처리는 앞에서 진행한 후 마지막으로 이 함수로 표현해야 할 것이다.)

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    float num = 3.4356;

    cout.precision(4);
    cout << num << endl; //앞에서 부터 4개 (3.435 까지 출력하며 반올림 때문에 3.436)

    cout << fixed; //소수점 고정
    cout.precision(4);
    cout << num << endl; //.(소수점)부터 뒤에 4개 출력

    float num2 = 3.402;
    cout.precision(2); //0까지 출력해준다.
    cout << num2;
}

[출력]

3.436
3.4356
3.40




참고 글: https://nextcoder.tistory.com/22