gpt4 book ai didi

c++ - 为 float 配置 std::ofstream 格式

转载 作者:行者123 更新时间:2023-11-30 03:40:49 25 4
gpt4 key购买 nike

有没有办法配置ostream使用iomanip输出 float 如下:

0.00000000000000E+0000
3.99147034531211E-0003
...

我正在将代码从 Pascal 翻译成 C++,我需要以完全相同的格式输出数字。最好使用 std::ofstream 而不是 fprintf 或其他 C 库函数。

最佳答案

一种方法是使用一些字符串操作。使用科学记数法格式化为字符串流,然后在“e”处拆分字符串。现在您有了可以自己格式化的部分。

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

std::string format(double val)
{
std::ostringstream oss;
oss << std::scientific << std::setprecision(14) << val;
auto result = oss.str();
auto match = result.find('e');
if (match == std::string::npos)
{
// Should never get here -- maybe throw
}

oss.str("");
auto exp = std::stoi(result.substr(match+1));
oss << result.substr(0, match) << 'E'
<< std::setw(5) << std::setfill('0')
<< std::internal << std::showpos << exp;
result = oss.str();

return result;
}

int main()
{
std::cout << format(3.99147034531211e-3) << '\n';
std::cout << format(6.02214085774e23) << '\n';
}

输出:

3.99147034531211E-0003
6.02214085774000E+0023

关于c++ - 为 float 配置 std::ofstream 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37815481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com