C++ c++;科学记数法,改变指数的位数

C++ c++;科学记数法,改变指数的位数,c++,scientific-notation,C++,Scientific Notation,我使用此代码将科学符号编号输出到文件: file << scientific << setprecision(10) << num << endl; 文件就像@Bob_uuuuuuuu所说的那样,VisualStudio过去有一个名为:\u set\u output\u format的函数,它允许您更改指数,但我相信在VisualStudio 2015版本中它被删除了 如中所引用 %e和%e格式说明符将浮点数格式化为 十进制尾数和指数。%g和%g

我使用此代码将科学符号编号输出到文件:

file << scientific << setprecision(10) << num << endl;

文件就像@Bob_uuuuuuuu所说的那样,VisualStudio过去有一个名为:
\u set\u output\u format
的函数,它允许您更改指数,但我相信在VisualStudio 2015版本中它被删除了

如中所引用

%e
%e
格式说明符将浮点数格式化为 十进制尾数和指数。
%g
%g
格式说明符 在某些情况下,以这种形式格式化数字。在以前的版本中 CRT总是生成具有三位指数的字符串。对于 例如,
printf(“%e\n”,1.0)
将打印
1.000000e+000
这是 不正确:C要求如果指数仅使用 一个或两个数字,则只打印两个数字。

在Visual Studio 2005中,添加了一个全局一致性开关:
\u设置\输出\格式
。程序可以使用参数
\u两位数指数
调用此函数,以启用一致指数打印。 默认行为已更改为符合标准 指数打印模式

因此,为了解决您的问题,如果您真的想要使用3位指数进行写入,则需要修改输出。可以通过将double转换为字符串来实现,例如:

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>


std::string getStrCpy(double dbl) {
    std::ostringstream str;
    str << std::scientific << std::setprecision(10) << dbl;
    std::string s = str.str();
    std::cout << s; // Prints 3.0000000000e+00
    return s;
}

int main() {

    double d = 3.0;
    std::cout.precision(10);
    std::cout << std::scientific;

    std::cout << d << '\n'; // Prints 3.0000000000e+00
    getStrCpy(d); // Will also print 3.0000000000e+00

    return 0;
}
#包括
#包括
#包括
#包括
std::string getStrCpy(双dbl){
std::ostringstream str;

str您使用的是哪种编译器?我相信
gcc
的标准应该是三位数。我使用的是visual studio。编译器版本是Microsoft(R)C/C++优化编译器版本19.25.28614 for x86相关:(如果不是副本)。此外:。简言之,您不能,您必须“手动”修改输出。@Bob\uuuu你确定吗?根据,输出有3位指数?@Darklander参见引用C11标准的地方“指数总是包含至少两位数字,并且只包含表示指数所需的更多数字。如果值为零,则指数为零”。此外: