将数字从字符串流转换为具有设置精度的字符串



我想从字符串流中获得一个数字,并将其设置为5位有效数字。我该怎么做?到目前为止,这就是我设法想出的:

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

然而,这不是编译。谢谢

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

您可以使用流操纵器:

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

您需要包括<iomanip>

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

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

precision成员函数返回当前精度,而不是对字符串流的引用,因此您无法像在代码段中所做的那样链接调用。

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

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

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

您可以从标题<iomanip> 使用std::setprecision

#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();
}

最新更新