Arredonde o número 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++ -
Use os especificadores de formato de função
fprintf
para arredondar o número de ponto flutuante para 2 decimais em C++ -
Use
std::setprecision
estd::fixed
para arredondar 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;
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