c++ - float - Puntos decimales con std:: stringstream?
std:: iomanip (1)
Tengo un montón de números enteros que puse en stringstream
s. Ahora quiero cambiar el stringstream
s por string
s manteniendo una precisión constante con el string
s. ¿Como podría hacerlo? Sé que puedo usar stringstreams.precision()
, pero no funciona por alguna razón:
float a = 5.23;
float b = 3.134;
float c = 3.0;
std::stringstream ta;
std::stringstream tb;
std::stringstream tc;
ta << a;
tb << b;
tc << c;
ta.precision(2);
tb.precision(2);
tc.precision(2);
std::string out = "";
out += ta.str() + "/n";
out += tb.str() + "/n";
out += tc.str() + "/n";
5.23/n3.134/n3.0
, en lugar de 5.23/n3.13/n3.00
Creo que su problema es que la precision()
establece la precisión utilizada en las futuras operaciones de inserción de flujos, no al generar 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 la precision
demasiado tarde, ya que las tres primeras líneas ya han convertido los números de punto flotante en cadenas con la precisión predeterminada.
Para solucionar este problema, intente cambiar el orden en el que 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 la stringstream
de caracteres utilicen su precisión personalizada en lugar de los valores predeterminados existentes.
Sin embargo, el efecto del modificador de precision
solo es significativo si le dice explícitamente a la transmisión que desea utilizar una notación de precisión fija o científica para la salida. Para hacer esto, puedes usar los modificadores fixed
o scientific
:
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 es necesario utilizar tres stringstream
para lograr su objetivo. Solo puedes usar uno:
std::stringstream t;
t.precision(2);
t << fixed << a << ''/n'' << b << ''/n << c << ''/n'';
std::string out = t.str();