Я думаю, что ваша проблема в том, что precision()
устанавливает точность, используемую в будущих операциях вставки потока, а не при генерации последней строки для представления.То есть, записывая
ta << a;
tb << b;
tc << c;
ta.precision(2);
tb.precision(2);
tc.precision(2);
Вы устанавливаете precision
слишком поздно, поскольку первые три строки уже преобразовали числа с плавающей запятой в строки с точностью по умолчанию.
Toисправьте это, попробуйте изменить порядок выполнения этих операторов на
ta.precision(2);
tb.precision(2);
tc.precision(2);
ta << a;
tb << b;
tc << c;
. Это приведет к тому, что записи в stringstream
будут использовать вашу пользовательскую точность, а не существующие значения по умолчанию.
Однако эффект модификатора precision
имеет смысл только в том случае, если вы явно указываете потоку, что вы хотите использовать для вывода либо фиксированную точность, либо научную нотацию.Для этого вы можете использовать модификаторы fixed
или scientific
:
ta.precision(2);
tb.precision(2);
tc.precision(2);
ta << fixed << a;
tb << fixed << b;
tc << fixed << c;
. Это будет правильно отображать соответствующее количество цифр.
В связанной заметке вы неНе нужно использовать три stringstream
с для достижения вашей цели.Вы можете просто использовать один:
std::stringstream t;
t.precision(2);
t << fixed << a << '\n' << b << '\n << c << '\n';
std::string out = t.str();