C++ 为什么setw和width不适用于ostringstream?

C++ 为什么setw和width不适用于ostringstream?,c++,string,stl,iostream,C++,String,Stl,Iostream,我有以下代码: template<typename _Tp> std::string string_from_number(_Tp number, int precision = 5) { std::ostringstream oss; oss.width(precision+1); oss<<number; return oss.str(); } 模板 std::字符串字符串\u来自\u编号(\u Tp编号,int精度=5) { std::ostrin

我有以下代码:

template<typename _Tp>
std::string string_from_number(_Tp number, int precision = 5)
{
  std::ostringstream oss;
  oss.width(precision+1);
  oss<<number;
  return oss.str();
}
模板
std::字符串字符串\u来自\u编号(\u Tp编号,int精度=5)
{
std::ostringstream oss;
oss.宽度(精度+1);

oss用于控制浮点数中显示的位数,您需要的功能是
精度
,而不是
宽度
。如果您希望确保以固定符号(而不是科学符号)显示数字另请查看与
setf
成员函数一起使用的格式标志
fixed

为了控制浮点数中显示的位数,您需要的函数是
精度
,而不是
宽度
。如果您希望确保以固定符号显示数字(而不是科学符号)另外,请查看与
setf
成员函数一起使用的格式标志
fixed

默认值为8?为什么默认值为8?能否显示完整的代码示例,您的预期输出和实际输出?因为对我来说,这正是我所期望的。当默认值为使用的是5。你说的是浮点数中显示的位数吗?你想要的函数是,而不是宽度。你是对的,我认为默认值可能是9。感谢测试,即使使用你的代码,如果我使用一个双精度作为输入,比如说精度为2,它也会坚持默认宽度……是的,同时我也会告诉你在某个论坛上也红了,
precision
现在很好。如果你把它放在一个答案中,我会投票接受它。(再次感谢你的努力。默认的8?为什么默认的8?你能展示一个完整的代码示例,你的预期输出和你的实际输出吗?因为对我来说,这正是我期望它做的。当使用默认值5时,它返回一个长度为6的字符串。你说的是浮点数中显示的位数吗?你想要的函数是,而不是
width
。你是对的,我认为默认值可能是9。感谢您的测试,即使使用您的代码,如果我使用双精度作为输入,比如说2,它也是ICK到默认宽度…是的,同时我也在一些论坛上找到了,
precision
现在可以了。如果你把它放在一个答案中,我会投票接受它。;)再次感谢你的努力。如果
precision
是总位数,我如何设置小数点后的位数?这将与标志floatfield
。如果
precision
表示总位数,那么如何设置小数点后的位数?这将与标志
floatfield
一起设置。