HOWTO · C++
Usa setprecision in C++
Questo articolo introduce come utilizzare il metodo setprecision() in C++
In questa pagina
Questo articolo mostrerà diversi metodi su come utilizzare il metodo setprecision in C++.
Usa il metodo setprecision() per impostare la precisione personalizzata per i flottanti
setprecision() fa parte della libreria dei manipolatori I/O <iomanip> e può essere usato per modificare la precisione predefinita dei numeri in virgola mobile. setprecision() viene solitamente utilizzato nelle espressioni con flussi di I/O.
L’esempio seguente mostra come impostare la precisione del numero float per l’oggetto flusso di output cout. Si noti che setprecision() si applica al numero intero (parte intera e parte frazionaria) e utilizza la notazione scientifica quando i numeri hanno una grandezza maggiore della precisione specificata.
#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> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
cout << setprecision(3) << i << " | ";
}
cout << endl;
return EXIT_SUCCESS;
}
Produzione:
123 | 2.23 | 0.324 | 0.012 | 26.9 | 1.1e+04 | 92 | 2.34e-07 |
Usa setprecision() e std::fixed() per impostare la precisione personalizzata per i flottanti
In alternativa, possiamo usare i manipolatori di flusso setprecision() e fixed() insieme per stampare valori in virgola mobile con lo stesso numero di cifre dopo il punto decimale. Il metodo fixed() imposta la parte frazionaria del numero su una lunghezza fissa, che per impostazione predefinita è di 6 cifre. Nel seguente esempio di codice, eseguiamo l’output nel flusso cout e chiamiamo entrambi i manipolatori prima che il numero venga inserito nell’output.
#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> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
cout << fixed << setprecision(3) << i << " | ";
}
cout << endl;
return EXIT_SUCCESS;
}
Produzione:
123.231 | 2.234 | 0.324 | 0.012 | 26.949 | 11013.000 | 92.001 | 0.000 |
Usa setprecision() e std::fixed() per allineare i galleggianti a un punto decimale
Infine, possiamo combinare i manipolatori setw, right, setfill, fixed e setprecision per produrre numeri in virgola mobile allineati al punto decimale. Il metodo setw specifica la larghezza del flusso di output con il numero di caratteri passati come argomento. setfill imposta un carattere con il quale verrà riempito lo spazio inutilizzato e il metodo right dice a cout il lato a cui si applica l’operazione di riempimento.
#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> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
cout << std::setw(10) << std::right << std::setfill(' ') << fixed
<< setprecision(4) << i << endl;
}
cout << endl;
return EXIT_SUCCESS;
}
Produzione:
123.2310
2.2343
0.3240
0.0120
26.9491
11013.0000
92.0011
0.0000