Arredonde o número de ponto flutuante para 2 decimais em C++

Jinku Hu 12 outubro 2023
  1. Use os especificadores de formato de função printf para arredondar o número de ponto flutuante para 2 decimais em C++
  2. Use os especificadores de formato de função fprintf para arredondar o número de ponto flutuante para 2 decimais em C++
  3. Use std::setprecision e std::fixed para arredondar o número de ponto flutuante para 2 decimais em C++
Arredonde o número de ponto flutuante para 2 decimais em C++

Este artigo explicará vários métodos de como arredondar números de ponto flutuante para 2 decimais em C++.

Use os especificadores de formato de função printf para arredondar o número de ponto flutuante para 2 decimais em C++

Os números de ponto flutuante têm representação binária especial, o que implica que os números reais não podem ser representados exatamente pelas máquinas. Assim, é comum recorrer a funções de arredondamento ao operar sobre os números de ponto flutuante e fazer cálculos sobre eles. Nesse caso, porém, só precisamos gerar uma determinada parte da parte fracionária dos números.

A primeira solução é utilizar a função printf para enviar texto formatado para o fluxo stdout. Observe que o especificador de formato regular para os números float - %f deve ser modificado para %.2f. A última notação garante que apenas 2 decimais sejam impressos a partir do número e, ao mesmo tempo, ele faz o arredondamento de acordo com as regras matemáticas comuns. Lembre-se de que uma notação semelhante pode ser usada com especificadores de formato de outros tipos de dados.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    printf("%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

Resultado:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

Use os especificadores de formato de função fprintf para arredondar o número de ponto flutuante para 2 decimais em C++

fprintf é outra função que pode ser usada para fazer a formatação de saída como a chamada printf e, adicionalmente, pode escrever em qualquer objeto de fluxo FILE* que pode ser passado como o primeiro argumento. No exemplo a seguir, demonstramos a impressão no fluxo stderr, uma versão sem buffer de stdout para relatório de erros e registro.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    fprintf(stderr, "%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

Resultado:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

Use std::setprecision e std::fixed para arredondar o número de ponto flutuante para 2 decimais em C++

Alternativamente, pode-se utilizar a função std::setprecision da biblioteca dos manipuladores deI/OO em conjunto com std::fixed. O último é usado para modificar a formatação padrão para operações de entrada/saída de ponto flutuante. Se o usarmos junto com std::setprecision, o resultado é a precisão fixa dos números reais, e a precisão pode ser especificada com o argumento inteiro passado para o próprio std::setprecision.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::setprecision;
using std::vector;

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    cout << setprecision(2) << fixed << item << "; ";
  }

  return EXIT_SUCCESS;
}

Resultado:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Float