这段代码:
#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机器上.
如何指定指数字段的宽度(为什么首先存在差异)?
我认为使用标准操纵器这是不可能的。(如果是的话,我很乐意得到纠正并学习如何操作)
您唯一剩下的选择是自己创建一个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)