Usa setprecision in C++
-
Usa il metodo
setprecision()
per impostare la precisione personalizzata per i flottanti -
Usa
setprecision()
estd::fixed()
per impostare la precisione personalizzata per i flottanti -
Usa
setprecision()
estd::fixed()
per allineare i galleggianti a un punto decimale
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
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