HOWTO · C++
Stampa i numeri con i punti decimali specificati in C++
Questo articolo introduce come stampare i numeri con i punti decimali specificati in C++
In questa pagina
Per stampare un valore in virgola mobile con un numero scelto di cifre dopo la virgola, invia std::fixed seguito da std::setprecision(n) a std::cout. Per esempio, std::fixed << std::setprecision(2) mostra due cifre dopo la virgola. Includi <iostream> per l’output e <iomanip> per i manipolatori. Le etichette e gli output visibili negli esempi restano in inglese, come nel codice invariato.
Usare std::fixed e std::setprecision
std::fixed seleziona la notazione a virgola fissa. Con questo formato attivo, std::setprecision(n) imposta il numero di cifre dopo la virgola: i valori vengono arrotondati per la visualizzazione e, se necessario, completati con zeri finali. Senza std::fixed, invece, std::setprecision(n) controlla il numero di cifre significative. Per maggiori dettagli, consulta la guida a setprecision.
Compila ed esegui questo programma completo:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
#include <iomanip>
#include <iostream>
int main() {
const double values[] = {3.14159, 2.5, 0.004};
std::cout << std::fixed << std::setprecision(2);
for (double value : values) {
std::cout << value << '\n';
}
}
3.14
2.50
0.00
Il primo valore viene arrotondato per la visualizzazione, il secondo mostra una cifra frazionaria finale e il terzo viene formattato con la stessa precisione di due cifre decimali. La formattazione modifica la rappresentazione visualizzata, ma non i valori memorizzati né rende esatti i calcoli in virgola mobile. Per mostrare tre cifre dopo la virgola, usa std::setprecision(3).
Lo stream mantiene std::fixed e la precisione selezionata per i successivi inserimenti di valori in virgola mobile. Imposta una precisione diversa se i valori seguenti richiedono un’altra visualizzazione. I manipolatori sono dichiarati in <iomanip>.
Allineare i valori con std::setw e std::setfill
Per disporre i valori in colonne, std::setw(width) imposta una larghezza minima del campo per il valore inserito successivamente. Non tronca i valori che richiedono più spazio e la larghezza viene azzerata dopo quell’inserimento. std::setfill(ch) seleziona il carattere di riempimento, che resta attivo finché non viene cambiato. Per impostazione predefinita, i numeri sono allineati a destra.
Questo esempio completo usa i punti come riempimento e dispone ogni numero formattato in un campo di otto caratteri:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
#include <iomanip>
#include <iostream>
int main() {
std::cout << std::fixed << std::setprecision(2) << std::setfill('.')
<< std::setw(8) << 12.5 << '\n'
<< std::setw(8) << 3.75 << '\n';
}
...12.50
....3.75
Applica di nuovo std::setw per ogni valore che deve avere una larghezza specifica: cambiare il carattere di riempimento non imposta la larghezza. Scegli una larghezza sufficiente per il segno, le cifre, la virgola e le cifre frazionarie previste.
Formattare con printf
Nei programmi C++ si può usare anche printf da <cstdio>. Nella stringa di formato, %.2f stampa un valore in virgola mobile con due cifre dopo la virgola; cambia 2 per scegliere un altro numero di cifre.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
#include <cstdio>
int main() {
const double value = 1.41421;
std::printf("Number with two decimal places: %.2f\n", value);
}
Number with two decimal places: 1.41
Con printf, %f è il formato di conversione in virgola mobile per un argomento di tipo double. Lo specificatore di formato deve corrispondere al tipo dell’argomento: un abbinamento errato può causare un comportamento indefinito. Questo è un programma C++ completo e non richiede gli header degli stream.
Scegliere tra gli stream C++ e printf
Usa std::cout con std::fixed e std::setprecision quando vuoi formattare con gli stream C++ e concatenare il risultato ad altri inserimenti, mantenendo il tipo di ciascun valore. Usa printf se lavori con stringhe di formato nello stile di printf o se questa sintassi ti risulta più comoda. Entrambe le opzioni sono valide in C++.
Per ottenere un numero fisso di cifre decimali, ricorda di combinare std::fixed con std::setprecision: nel formato predefinito dello stream, il solo manipolatore di precisione ha un significato diverso. Usa std::setw e std::setfill per aggiungere riempimento alle colonne e applica di nuovo std::setw prima di ogni valore, perché la larghezza vale una sola volta.