2010-09-20 29 views
7

Tengo un problema con respecto a la conversión de cadena flotante a C++ utilizando ostringstream. Aquí está mi línea:Redondeo de flotadores con ostringstream

void doSomething(float t) 
{ 
    ostringstream stream; 
    stream << t; 
    cout << stream.str(); 
} 

cuando t tiene un valor -0.89999 es redondear a -0.9, pero cuando su valor es 0.0999 o menor que esto decir 1.754e-7, sólo se imprime sin redondear. ¿Cuál puede ser la solución para esto?

+0

¿Por qué no pasas el flotador directamente a 'cout'? –

+0

@In silico, en realidad quiero usar ese valor en algún punto de mi código. – boom

+0

@In silico, lo que realmente dices no funciona. – boom

Respuesta

14

Es necesario configurar la precisión de ostringstream usando precision

por ejemplo

stream.precision(3); 
stream<<fixed; // for fixed point notation 
//cout.precision(3); // display only 
stream << t; 

cout<<stream.str(); 
+0

obtuve una solución para 0.0999, pero para el número de 7.9e-08 todavía estoy recibiendo lo mismo. Entonces, ¿cuál puede ser la solución para esto? – boom

+0

necesita establecer la precisión de la transmisión en sí. es decir, stream.precision (3); – yadab

+0

estoy haciendo lo mismo. aquí está mi código: flujo ostringstream; \t \t \t stream.precision (1); \t \t \t transmisión << t; \t \t \t cout << endl << "Valor:" << stream.str(); – boom

6

Si desea ver un número particular de cifras significativas, intente con setprecision (n) donde n es el número de cifras significativas que desea.

#include <iomanip> 

void doSomething(float t) 
{ 
    ostringstream stream; 
    stream << std::setprecision(4) << t; 
    cout << stream.str(); 
} 
+1

¿Por qué le gustaría establecer la precisión al enviar una cadena a 'cout' ...? –

+0

shuttle87, he reparado lo que consideré un error obvio. Espero que no te moleste. – sbi

0

Uso setprecision:

stream << setprecision(5) <<t ; 

Ahora, la cadena de stream.str() habrá de la precisión requerida .

+0

obtuve una solución para 0.0999, pero para el número de 7.9e-08 todavía estoy recibiendo lo mismo. Entonces, ¿cuál puede ser la solución para esto? – boom

2

Si desea punto fijo en lugar de la notación científica, utilizar std::fixed:

stream << std::fixed << t; 

Adicionalmente es posible que desee ajustar la precisión como se ha mencionado.