如何设置ostream的指数字段的宽度?

and*_*ykx 6 c++

这段代码:

#include <iostream>
int main( int, char **argv )
{
std::cout << 1.23e45 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

版画

1.23E + 045

使用MS Visual Studio 2003编译时,和

1.23E + 45

在我的Linux机器上.

如何指定指数字段的宽度(为什么首先存在差异)?

Pie*_*ter 1

我认为使用标准操纵器这是不可能的。(如果是的话,我很乐意得到纠正并学习如何操作)

您唯一剩下的选择是自己创建一个streambuf,并拦截进入流的所有指数数字,手动重新格式化它们,然后将它们传递到底层流。

看起来工作量很大,虽然不是火箭科学,但也不是微不足道的任务。

关于“为什么”问题:我知道linux将指数定义为最小两位数,我想Windows将其指定为最小三位数?

// on linux
std::cout << std::scientific << 1.23e4 << std::endl
Run Code Online (Sandbox Code Playgroud)

还添加一个前导零:

1.230000e+04
Run Code Online (Sandbox Code Playgroud)