Stampa i numeri con i punti decimali specificati in C++

Jinku Hu 12 ottobre 2023
Stampa i numeri con i punti decimali specificati in C++

Questo articolo introdurrà come stampare i numeri con i punti decimali specificati in C++.

Usa i metodi std::fixed e std::setprecision per specificare la precisione

Questo metodo utilizza i cosiddetti manipolatori I/O dalla libreria standard definita nell’intestazione <iomanip> (vedi lista completo). Queste funzioni possono modificare i dati del flusso e vengono utilizzate principalmente per le operazioni di formattazione I/O. Nel primo esempio, usiamo solo il metodo fixed, che modifica la formattazione predefinita in modo che i valori a virgola mobile siano scritti usando la notazione a virgola fissa. Nota, tuttavia, il risultato ha sempre una precisione predefinita di 6 punti.

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

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

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << fixed << d << endl;
  }
  return EXIT_SUCCESS;
}

Produzione:

123.231000
2.234300
0.324000
10.222424
6.349109
110.123294
92.001112
0.000000

In alternativa, possiamo fissare i punti decimali dopo la virgola e specificare contemporaneamente il valore di precisione. Nel prossimo esempio di codice, la funzione fixed viene chiamata insieme a setprecision, che a sua volta prende il valore int come parametro.

#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,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << fixed << setprecision(3) << d << endl;
  }
  return EXIT_SUCCESS;
}

Produzione:

123.231
2.234
0.324
10.222
6.349
110.123
92.001
0.000

L’esempio di codice precedente risolve il problema iniziale, ma l’output sembra piuttosto misto e difficilmente ha una formattazione leggibile. Possiamo usare le funzioni std::setw e std::setfill per visualizzare i valori in virgola mobile in un dato vettore allineato alla stessa posizione della virgola. Per ottenere ciò, dovremmo chiamare la funzione setw per indicare a cout la lunghezza massima di ogni uscita (scegliamo 8 in questo caso). Successivamente, viene chiamata la funzione setfill per specificare un char che riempirà i posti di riempimento. Infine, aggiungiamo i metodi usati in precedenza (fixed e setprecision) e l’output alla console.

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

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

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << setw(8) << setfill(' ') << fixed << setprecision(3) << d << endl;
  }
  return EXIT_SUCCESS;
}

Produzione:

123.231
  2.234
  0.324
 10.222
  6.349
110.123
 92.001
  0.000
Autore: 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

Articolo correlato - C++ Float