2012-01-27 8 views
5

ho un problema con numeri float precisione:uscita per trasmettere numeri float con precisione

int main(void) { 
    double b = 106.829599; 
    float a = b; 
    std::cerr << std::setprecision(6) << "a = " << a << "; b = " << b << std::endl; 
    std::cerr << std::setprecision(7) << "a = " << a << "; b = " << b << std::endl; 
} 

risultato è:

a = 106.83; b = 106,83

a = 106,8296; b = 106.8296

Così, la mia domanda è: perché i numeri in prima linea sono così brevi (mi aspettavo di vedere 106,829)

gcc 4.1.2, anche ho fatto un test a LWS

risposta

8

In realtà, 106,829599 arrotondato a 6 cifre (3 decimali) è 106,830, che viene visualizzato come 106,83 poiché la precisione di 6 cifre assegnata a setprecision è solo un valore massimo.

La precisione decimale determina il numero massimo di cifreessere compilata operazioni di inserimento di esprimere valori in virgola mobile.

Quello che stai cercando è la combinazione di setprecision con fixed.

Problemi correlati