我正在使用以下代码将科学计数法的数字输出到文件:
file << scientific << setprecision(10) << num << endl;
例如,如果数字是3.0,代码输出结果是3.0000000000E+00。如何将指数部分的数字位数变为3位?我想要得到的结果是3.0000000000E+000。
我正在使用以下代码将科学计数法的数字输出到文件:
file << scientific << setprecision(10) << num << endl;
_set_output_format
的函数,它允许您更改指数,但我相信这在Visual Studio 2015版本中被删除了。
%e
和%E
格式说明符将浮点数格式化为十进制的尾数和指数。在某些情况下,%g
和%G
格式说明符也以这种形式格式化数字。在之前的版本中,CRT 总是生成带有三位数字指数的字符串。例如,printf("%e\n", 1.0)
将打印出1.000000e+000
。这是不正确的:C 要求如果指数只能用一到两个数字表示,则只打印两个数字。在 Visual Studio 2005 中,添加了全局一致性开关:
_set_output_format
。程序可以调用此函数并使用参数_TWO_DIGIT_EXPONENT
,以启用符合要求的指数打印。默认行为已更改为符合标准的指数打印模式。
因此,如果您确实想要使用三位数字指数编写内容,则需要修改输出。您可以通过将双精度浮点数转换为字符串来实现,例如:
#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;
}
getStrCpy()
将返回一个字符串,其中包含您尝试打印的double值,您可以修改该字符串以添加额外的数字到指数。
gcc
的标准应该是三位数字。 - darclander