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标准的地方“指数总是包含至少两位数字,并且只包含表示指数所需的更多数字。如果值为零,则指数为零”。此外: