c++ - c++科学记数法,改变指数的位数
问题描述
我正在使用此代码将科学计数法数字输出到文件:
file << scientific << setprecision(10) << num << endl;
例如,如果数字是 3.0,我从代码中得到 3.0000000000E+00。如何将指数部分的数字设为 3 位?我想得到 3.0000000000E+000。
解决方案
正如@Bob__ 所说,Visual Studio 曾经有一个名为:的函数_set_output_format
,它允许您更改指数,但我相信这已在 Visual Studio 2015 版本中删除。
如Portable printing of a double to C++ iostreams 中所引用。
%e
and格式说明符将%E
浮点数格式化为十进制尾数和指数。在某些情况下,%g
and%G
格式说明符还会以这种形式格式化数字。在以前的版本中,CRT 总是会生成具有三位指数的字符串。例如,printf("%e\n", 1.0)
将打印1.000000e+000
. 这是不正确的:C 要求如果指数只能用一位或两位数表示,则只打印两位数。在 Visual Studio 2005 中添加了一个全局一致性开关:
_set_output_format
. 程序可以使用参数调用此函数_TWO_DIGIT_EXPONENT
,以启用符合要求的指数打印。默认行为已更改为符合标准的指数打印模式。
因此,如果您真的想用 3 位指数编写,为了解决您的问题,需要修改输出。您可以通过将双精度转换为字符串来实现,例如:
#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()
将返回一个您尝试打印的双精度字符串,您可以对其进行修改,以便为您的指数添加一个额外的数字。
推荐阅读
- python - 我可以在 python 中提供 gcloud 命令吗
- sockets - 发送后如何正确关闭套接字(使用 IOCP)?
- sql - 使用全部 62 个字符的唯一随机 ID
- ios - 使用 Swift 4.2 编译的 Xcode 10.2 模块无法被 Swift 5.0 编译器导入
- javascript - 如何使用自定义主题调色板更改某些部分的文本颜色而不覆盖另一个主题?
- windows - TCMALLOC 内存泄漏
- ios - 依赖注入在 iOS 应用程序开发中真的很重要吗?
- android - react-native-contacts getAll 返回 null
- python - 如何使用文件写入输入以及日期和时间
- python - Python:按其值清理凌乱的数据框