Преобразовать число из потока строк в строку с заданной точностью

Я хотел бы получить число из stringstream и установить его на 5 значащих цифр. Как мне это сделать? До сих пор это то, что мне удалось придумать:

double a = 34.34566535
std::stringstream precisionValue;
precisionValue.precision(6) << a << std::endl;

Однако это не компилируется. Благодарю.

2

Решение

Это не компилируется, потому что ios_base::precision() возвращается streamsize (это цельный тип).

Ты можешь использовать ручные манипуляторы:

precisionValue << std::setprecision(6) << a << std::endl;

Вам нужно будет включить <iomanip>,

9

Другие решения

std::stringstream::precision() возвращает streamsize, а не ссылка на сам поток, который требуется, если вы хотите упорядочить << операторы. Это должно работать:

double a = 34.34566535;
std::stringstream precisionValue;
precisionValue.precision(6);
precisionValue << a << std::endl;
5

precision Функция-член возвращает текущую точность, а не ссылку на строковый поток, поэтому вы не можете связать вызовы так, как вы это сделали во фрагменте.

precisionValue.precision(6);
precisionValue << a;
std::cout << precisionValue.str() << std::endl;

Или используйте setprecision IO манипулятор для цепочки вызовов:

precisionValue << setprecision(6) << a;
std::cout << precisionValue.str() << std::endl;
3

Ты можешь использовать std::setprecision из заголовка <iomanip>

#include <string>
#include <sstream>
#include <iomanip>
#include <iostream>

int main()
{
double a = 34.34566535;
std::stringstream precisionValue;
precisionValue << std::setprecision(6);
precisionValue << a << std::endl;
std::cout << precisionValue.str();
}
2
По вопросам рекламы [email protected]