[英]Can I use std:fixed or std::setprecision() with >> operator?
[英]Why can't I use fixed and setprecision() with +operator for strings instead of <<operator for cout
為什么我不能在+ operator中使用“ fixed”和“ 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;
}
為什么不能在+ operator中使用“ fixed”和“ setprecision()”將其格式化為字符串?
仔細看一下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 << setprecision(n)或str >> 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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.