Вы ищете precision
, а не fixed
. precision
будет указывать максимальную используемую точность, но не будет автоматически печатать больше нулей, поэтому увеличивайте ее столько, сколько вам нужно. fixed
принудительно выставит столько нулей, сколько установлено для precision
. Если вы установили fixed
ранее, вы можете сбросить его с помощью ios_base::defaultfloat
.
template<typename T> string toString(const T& val)
{
stringstream os;
os.precision(15);
os << val;
return os.str();
}
....
void MyApp::run()
{
double myval = 99999.99;
string myval_as_string = toString<double>(myval);
cout << "myval=" << myval << endl;
cout.precision(15);
cout << "myval=" << myval << endl;
cout << "myval as string =" << myval_as_string << endl;
}
Для получения дополнительной информации, вы можете проверить стандарт здесь: http://www.cplusplus.com/reference/ios/ios_base/precision/. Обратите внимание на следующую строку:
Используя стандартную запись с плавающей точкой, поле точности
определяет максимальное количество значащих цифр для отображения в общем
считая как до, так и после десятичной точки. уведомление
что это не минимум, и поэтому он не дополняет отображаемый
число с конечными нулями, если число может отображаться с меньшим
цифр, чем точность.