Я думаю, что ваша проблема в том, что precision()
устанавливает точность, используемую в будущих операциях вставки потока, а не при создании окончательной строки для представления. То есть, написав
ta << a;
tb << b;
tc << c;
ta.precision(2);
tb.precision(2);
tc.precision(2);
Вы устанавливаете precision
слишком поздно, так как первые три строки уже преобразовали числа с плавающей запятой в строки с точностью по умолчанию.
Чтобы исправить это, попробуйте изменить порядок выполнения этих операторов на
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
s для достижения вашей цели. Вы можете просто использовать один:
std::stringstream t;
t.precision(2);
t << fixed << a << '\n' << b << '\n' << c << '\n';
std::string out = t.str();
person
templatetypedef
schedule
25.02.2011