C++ 将浮点ostream打印限制为特定长度?

C++ 将浮点ostream打印限制为特定长度?,c++,iostream,C++,Iostream,这是一个例子 我在寻找稍微不同的东西,我正在打印一个4x4浮点矩阵。事实上,我正在使用它,这将阻止我使用我更熟悉的printf格式 我可以设置ios_base::width()来设置最小宽度来填充0和1,但是0之类的设置会使对齐变得更糟。我想我可以设置精度,但它只影响有效数字的数量,而不影响该值生成的字符总数。我似乎无法在ostream上使用unset来设置“默认符号”。。。即使我能做到这一点,我也怀疑负号会扰乱对齐 有解决办法吗 我的临时解决方案是宽度(7)和精度(4)。它在小数点后给我4位数

这是一个例子

我在寻找稍微不同的东西,我正在打印一个4x4浮点矩阵。事实上,我正在使用它,这将阻止我使用我更熟悉的
printf
格式

我可以设置
ios_base::width()
来设置最小宽度来填充0和1,但是
0之类的设置会使对齐变得更糟。我想我可以设置
精度
,但它只影响有效数字的数量,而不影响该值生成的字符总数。我似乎无法在
ostream
上使用
unset
来设置“默认符号”。。。即使我能做到这一点,我也怀疑负号会扰乱对齐


有解决办法吗

我的临时解决方案是
宽度(7)
精度(4)
。它在小数点后给我4位数字,3是用来放负号的空格,一个单位数和小数点。我必须检查并修改宽度,以适应(某些)大于
99.9999
或小于
-9.9999
的值,以保持对齐。这样做的好处是,
567890123
不会作为
5678901
打印,它所做的只是偏离对齐(很多情况下,它将作为
567890123.0000
打印)

我的临时解决方案是
宽度(7)
精度(4)
。它在小数点后给我4位数字,3是用来放负号的空格,一个单位数和小数点。我必须检查并修改宽度,以适应(某些)大于
99.9999
或小于
-9.9999
的值,以保持对齐。这样做的好处是,
567890123
不会作为
5678901
打印,它所做的只是偏离对齐(很多情况下,它将作为
567890123.0000
打印)

如果您将自己(例如)限制为4个字符,而有人想使用(例如)55432(.123456),您打算怎么做?失去精度可能没什么问题,因为它可以在小数点后获得空间,但不能在小数点之前。也许你可以计算出你所需要的最宽的字符,然后把其他字符填充到这个范围?理想情况下,我只想打印出最左边的n个字符:n=4:0.004或243.2或-222。如果我的值大于或小于用这种方式表示的值,那么我不需要知道确切的值是什么。看起来我可能需要做一些自定义字符串处理来获得我想要的确切行为。。。我能够让setf(std::ios\u base::fixed)
工作,这比以前更好,但我确实有负号问题,正如你所说,它不计算小数点之前的数字。我是不是要假设我没有限制宽度的机制?但是有了
printf
,这是可能的……我现在正在查看
中的
std::setprecision
。不,它看起来除了更方便地调用
precision
之外什么也不做。关于
printf
也能做到这一点,我似乎也错了。它不允许我截断!所以负号和前面的其他数字一起,我必须自己处理。有人请回答给出一个解决方案(除了简单的
sprintf
hackery)或验证没有我现在怀疑的stdlib解决方案。因此,如果您限制为4个字符,有人输入56789,您希望它打印最左边的4个字符:5678-正确吗?也许你可以将每一个字符都推到一个字符串流上,将较短的数字填充到你想要的大小,然后只提取你需要的数量。如果你将自己(例如)限制为4个字符,而有人想使用(例如)55432(.123456),你打算怎么办?失去精度可能没什么问题,因为它可以在小数点后获得空间,但不能在小数点之前。也许你可以计算出你所需要的最宽的字符,然后把其他字符填充到这个范围?理想情况下,我只想打印出最左边的n个字符:n=4:0.004或243.2或-222。如果我的值大于或小于用这种方式表示的值,那么我不需要知道确切的值是什么。看起来我可能需要做一些自定义字符串处理来获得我想要的确切行为。。。我能够让setf(std::ios\u base::fixed)工作,这比以前更好,但我确实有负号问题,正如你所说,它不计算小数点之前的数字。我是不是要假设我没有限制宽度的机制?但是有了
printf
,这是可能的……我现在正在查看
中的
std::setprecision
。不,它看起来除了更方便地调用
precision
之外什么也不做。关于
printf
也能做到这一点,我似乎也错了。它不允许我截断!所以负号和前面的其他数字一起,我必须自己处理。有人请回答给出一个解决方案(除了简单的
sprintf
hackery)或验证没有我现在怀疑的stdlib解决方案。因此,如果您限制为4个字符,有人输入56789,您希望它打印最左边的4个字符:5678-正确吗?也许您可以将每个数字推送到一个字符串流中,将较短的数字填充到所需的大小,然后提取所需的数量。