2011-12-18 12 views

risposta

15

Utilizzare setf e precision.

#include <iostream> 

using namespace std; 

int main() { 
    double f = 3.14159; 
    cout.setf(ios::fixed,ios::floatfield); 
    cout.precision(3); 
    cout << f << endl; 
    return 0; 
} 

Questo stampa 3.142

+0

Grazie. È stato utile per me. – ozeron

+0

Questo funziona per 3,14159 ma non funziona per 13.14159. La tua soluzione funziona solo con numeri inferiori a 10. – mantler

+0

@manler Hai ragione, il mio post originale no, ma quello finale (quello che ho editato 11 minuti fa) funziona correttamente. L'ho verificato con 2 e 3 cifre prima del punto decimale, e stampa 3 cifre come previsto. – dasblinkenlight

6

Questo non mostrare "13,141"

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main(){ 
    double f = 13.14159; 
    cout << fixed; 
    cout << setprecision(3) << f << endl; 
    return 0; 
} 
4

È possibile ottenere il numero di cifre decimali (e tante altre cose) fissato utilizzando l'intestazione iomanip. Per esempio:

#include <iostream> 
#include <iomanip> 

int main() { 
    double pi = 3.141592653589; 
    std::cout << std::fixed << std::setprecision(2) << pi << '\n'; 
    return 0; 
} 

uscita volontà:

3.14 

notare che sia fixed e setprecision modificare lo streaming in modo permanente in modo, se si vuole localizzare gli effetti, è possibile salvare le informazioni in anticipo e ripristinarlo successivamente :

#include <iostream> 
#include <iomanip> 

int main() { 
    double pi = 3.141592653589; 

    std::cout << pi << '\n'; 

    // Save flags/precision. 
    std::ios_base::fmtflags oldflags = std::cout.flags(); 
    std::streamsize oldprecision = std::cout.precision(); 

    std::cout << std::fixed << std::setprecision(2) << pi << '\n'; 
    std::cout << pi << '\n'; 

    // Restore flags/precision. 
    std::cout.flags (oldflags); 
    std::cout.precision (oldprecision); 

    std::cout << pi << '\n'; 

    return 0; 
} 

L'uscita che è:

3.14159 
3.14 
3.14 
3.14159 
+0

Grazie per aver mostrato come salvare e ripristinare le impostazioni del flusso, molto utile. – bhaller

+0

usa questa riga "using namespace std;" per ulteriori codice pulito –

+0

@Khaled, ci sono argomenti a favore e contro che sono abbastanza complessi da non rientrare in una casella di commento :-) Io preferisco i namespace espliciti per tutti tranne i programmi più semplici o, come minimo, utilizzando elementi specifici * all'interno di * uno spazio dei nomi anziché importare l'intero lotto. Tuttavia, quella particolare discussione è tangenziale alla domanda e alla mia risposta. – paxdiablo

Problemi correlati