将数字从stringstream转换为具有设定精度的字符串

时间:2012-09-10 15:31:55

标签: c++ precision significant-digits

我想从stringstream获取一个数字并将其设置为5位有效数字。我该怎么做呢?到目前为止,这是我设法提出的:

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

然而,这不是编译。感谢。

4 个答案:

答案 0 :(得分:11)

它无法编译,因为ios_base::precision()返回streamsize(它是一个整数类型)。

您可以使用stream manipulators

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

您需要加入<iomanip>

答案 1 :(得分:5)

std::stringstream::precision()返回streamsize,而不是对流本身的引用,如果要对<<运算符进行排序,则需要该引用。这应该有效:

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

答案 2 :(得分:3)

precision成员函数返回当前精度,而不是对stringstream的引用,因此您无法像在片段中那样链接调用。

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

或者使用setprecision IO操纵器来链接呼叫:

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

答案 3 :(得分:2)

您可以使用标题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();
}