Почему я не могу использовать «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;
}
Почему я не могу использовать «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.
Других решений пока нет …