Numero in virgola mobile arrotondato a 2 decimali in C++
-
Usa gli specificatori di formato della funzione
printf
per arrotondare il numero a virgola mobile a 2 decimali in C++ -
Usa gli specificatori di formato della funzione
fprintf
per arrotondare il numero a virgola mobile a 2 decimali in C++ -
Usa
std::setprecision
estd::fixed
per arrotondare il numero a virgola mobile a 2 decimali in C++
Questo articolo spiegherà diversi metodi su come arrotondare i numeri in virgola mobile a 2 decimali in C++.
Usa gli specificatori di formato della funzione printf
per arrotondare il numero a virgola mobile a 2 decimali in C++
I numeri in virgola mobile hanno una rappresentazione binaria speciale, il che implica che i numeri reali non possono essere rappresentati esattamente dalle macchine. Pertanto, è comune ricorrere a funzioni di arrotondamento quando si opera sui numeri in virgola mobile e si eseguono calcoli su di essi. In questo caso, però, abbiamo solo bisogno di produrre una certa porzione della parte frazionaria dei numeri.
La prima soluzione è utilizzare la funzione printf
per visualizzare il testo formattato nello stream stdout
. Nota che l’identificatore di formato regolare per i numeri float
- %f
dovrebbe essere modificato in %.2f
. Quest’ultima notazione assicura che solo 2 decimali siano stampati dal numero e, allo stesso tempo, esegue l’arrotondamento secondo le regole matematiche comuni. Tieni presente che una notazione simile può essere utilizzata con identificatori di formato di altri tipi di dati.
#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;
}
Produzione:
-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;
Usa gli specificatori di formato della funzione fprintf
per arrotondare il numero a virgola mobile a 2 decimali in C++
fprintf
è un’altra funzione che può essere usata per eseguire la formattazione dell’output come la chiamata a printf
e inoltre, può scrivere in qualsiasi oggetto stream FILE*
che può essere passato come primo argomento. Nell’esempio seguente, dimostriamo la stampa nel flusso stderr
, una versione senza buffer di stdout
per la segnalazione e la registrazione degli errori.
#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;
}
Produzione:
-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;
Usa std::setprecision
e std::fixed
per arrotondare il numero a virgola mobile a 2 decimali in C++
In alternativa, si può utilizzare la funzione std::setprecision
dalla libreria dei manipolatori I/O insieme a std::fixed
. Quest’ultimo viene utilizzato per modificare la formattazione predefinita per le operazioni di input/output a virgola mobile. Se lo usiamo insieme a std::setprecision
, il risultato è una precisione fissa dei numeri reali, e la precisione può essere specificata con l’argomento intero passato allo stesso 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;
}
Produzione:
-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