簡體   English   中英

為什么我不能在+ operator的字符串中使用fixed和setprecision()而不是<

[英]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::fixedstd::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.

ideone生活示范

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM