2012-01-27 13 views
5

tengo un problema con los números de flotador precisión:de salida para transmitir los números de flotador con precisión

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; 
} 

resultado es:

a = 106,83; b = 106.83

a = 106.8296; b = 106.8296

Por lo tanto, mi pregunta es ¿por qué los números en primera línea son tan cortos (que estaba esperando para ver 106,829)

gcc 4.1.2, también hice una prueba en LWS

Respuesta

8

En realidad, 106.829599 redondeado a 6 dígitos (3 decimales) es 106.830, que se muestra como 106.83 dado que la precisión de 6 dígitos dada a setprecision es solo un valor máximo.

La precisión decimal determina la número máximo de dígitos ser escrito en operaciones de inserción para expresar valores de punto flotante.

Lo que puede estar buscando es combinar setprecision con fixed.

Cuestiones relacionadas