gpt4 book ai didi

c++ - 在 iostream 中的不同数字格式样式之间切换

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:03 25 4
gpt4 key购买 nike

我有一个 C++ 程序将输出写入 iostream,但是我需要经常在不同的数字样式之间切换,例如介于科学与非科学之间。这是我正在查看的内容:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
cout << setw(2) << 1 << ' ' << setw(4) << 0.25 << ' ';
cout.width(6);
cout.setf(ios::scientific, ios::floatfield);
cout << 3.0 << ' ';
cout.unsetf(ios::floatfield);
cout << 4.0 << ' ';
cout.setf(ios::scientific, ios::floatfield);
cout << 3.0 << ' ';
cout.unsetf(ios::floatfield);
cout << 4.0 << endl;
return 0;
}

需要这种荒谬吗?它看起来很糟糕。作为比较,这在 C 中看起来更加理智:

#include <stdio.h>

int main()
{
printf("%2d %4g %6e %6g %6e %6g\n", 1, 0.25, 3.0, 4.0, 3.0, 4.0);
return 0;
}

有没有办法在C++中使用iostream使其更易于阅读?

最佳答案

这也可能有点矫枉过正,但你可以实现一些轻量级的类型来为你定制格式

struct Scientific
{
double value;
Scientific(double value) : value(value) { }
};

ostream& operator<< (ostream &o, const Scientific& p) {
o.setf(ios::scientific, ios::floatfield);
o << p.value;
o.unsetf(ios::floatfield);
return o;
}

然后可以将科学记数法指定为值的注释而不是多行

cout << 1 << ' ' << Scientific(2.0) << ' ' << endl;

关于c++ - 在 iostream 中的不同数字格式样式之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22622046/

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