为什么我不能使用"固定"和" setprecision()"使用+运算符将其格式化为字符串,并且我只能将其用于少于运算符的格式,以便为cout格式化它。我可以通过其他方式实现这一目标吗?
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a = 157.2734;
cout << "This number is " << fixed << setprecision(1) << a << "." << endl;
string line = "This number is " + fixed + setprecision(1) + a + "." + "\n"; // This doesn't work this way! Why!?!?!?
cout << line;
return 0;
}
答案 0 :(得分:2)
为什么我不能使用&#34;固定&#34;和&#34; setprecision()&#34;使用+运算符将其格式化为字符串?
仔细查看std::fixed
和std::setprecision()
。
std::fixed
的完整签名:
std::ios_base& fixed(std::ios_base& str);
因此,它专门用于处理流。
在std::setprecision()
的情况下,它有点棘手:
/*unspecified*/ setprecision( int n );
然而:
返回未指定类型的对象,使得如果str是std :: basic_ostream类型的输出流的名称或std :: basic_istream类型的输入流,则表达式str&lt;&lt; setprecision(n)或str&gt;&gt; setprecision(n)的行为就像执行了以下代码一样:
str.precision(n);
所以,如果有std::string::precision()
方法但它没有一个方法可能会有效。
我可以通过其他方式实现这一目标吗?
可能的解决方案:
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
double a = 157.2734;
cout << "This number is " << fixed << setprecision(1) << a << "." << endl;
ostringstream fmtStr;
fmtStr << "This number is " << fixed << setprecision(1) << a << ".\n";
string line = fmtStr.str();
cout << line;
return 0;
}
输出:
This number is 157.3.
This number is 157.3.