4

I would like to obtain a number from stringstream and set it to 5 significant figures. How do I do this? So far, this is what I have managed to come up with:

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

However, this is not compiling. Thanks.

4 Answers 4

11

It doesn't compile because ios_base::precision() returns streamsize (it's an integral type).

You can use stream manipulators:

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

You'll need to include <iomanip>.

Sign up to request clarification or add additional context in comments.

Comments

6

std::stringstream::precision() returns a streamsize, not a reference to the stream itself, which is required if you want to sequence << operators. This should work:

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

Comments

3

The precision member function returns current precision, not a reference to the stringstream, so you cannot chain the calls as you've done in the snippet.

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

Or use the setprecision IO manipulator to chain the calls:

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

Comments

2

You can use std::setprecision from header <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();
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.