Man*_*uel 15 c++ double formatting iostream platform-independent
我想打印一个double值来std::cout移植(GCC,clang,MSVC++),这样所有平台上的输出都是一样的.
我对指数的格式有问题.以下程序
#include <iostream>
int main()
{
std::cout << 0.1e-7 << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个输出与GCC一起:
1e-08
Run Code Online (Sandbox Code Playgroud)
以及MSVC的以下输出
1e-008
Run Code Online (Sandbox Code Playgroud)
如何使两个输出相同?
如果这是一个愚蠢的问题,我很抱歉,但到目前为止我还没有找到答案.所有格式似乎围绕尾数之前的所有格式化...
编辑:GCC的输出是1e-08不是1e-8(原先规定),所以它是符合.对困惑感到抱歉.
EDIT2:在Dietmar的评论之后,实际上将"尾数"重命名为"指数".维基百科上还有一节关于尾数与重要的部分.
Die*_*ühl 11
没有操纵器控制指数的格式化(我假设你的意思是指数而不是尾数;而且,用于尾数的"官方"名称是重要的).更糟糕的是,我在C标准中看不到任何限制指数格式的规则.我意识到这是关于C++的,但出于格式化细节的目的,C++标准指的是C标准.
我所知道的唯一方法是使用自己的std::num_put<char>方面,根据需要格式化值.然后将这个方面放入std::locale其中,然后将其imbue()编入std::cout.潜在的实现可以使用默认std::num_put<char>方面(或者snprintf(),遗憾的是,可能更简单)来格式化浮点数,然后从指数中去除前导零.