Creo que su problema es que precision()
establece la precisión utilizado en operaciones de inserción flujo futuro , no cuando se genera la cadena final para presentar. Es decir, escribiendo
ta << a;
tb << b;
tc << c;
ta.precision(2);
tb.precision(2);
tc.precision(2);
está configurando precision
demasiado tarde, ya que las tres primeras líneas ya se han convertido los números de punto flotante de cadenas utilizando la precisión predeterminada.
Para solucionar este problema, intente cambiar el orden en el que se ejecuta estas declaraciones a
ta.precision(2);
tb.precision(2);
tc.precision(2);
ta << a;
tb << b;
tc << c;
Esto hará que las escrituras en el stringstream
utilizar su precisión a medida en lugar de los valores predeterminados existentes.
Sin embargo, el efecto del modificador precision
solo tiene sentido si le indica explícitamente a la transmisión que desea usar la notación científica o de precisión fija para la salida. Para ello, puede utilizar cualquiera de los fixed
o scientific
modificadores:
ta.precision(2);
tb.precision(2);
tc.precision(2);
ta << fixed << a;
tb << fixed << b;
tc << fixed << c;
Esto mostrará correctamente el número apropiado de dígitos.
En una nota relacionada, no necesita utilizar tres stringstream
s para lograr su objetivo. Solo puede usar uno:
std::stringstream t;
t.precision(2);
t << fixed << a << '\n' << b << '\n << c << '\n';
std::string out = t.str();
gracias, pero no está funcionando. todavía estoy recibiendo '3.0' en lugar de' 3.00' – noobcpp
@ noobcpp- ¡Vaya! Mi error. Acabo de actualizar esto para mencionar que necesitas usar el modo 'fijo' o' científico' en las cadenas de caracteres. Intenta hacer ese cambio y ve si arregla las cosas. – templatetypedef
+1. @noobcpp: También, consulte: http://www.cplusplus.com/reference/iostream/ios_base/precision/ (aunque dicen que use 0 en un lugar que me está dando un error de compilación). –