4

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

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

但是,这不是编译。谢谢。

4

4 回答 4

11

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

您可以使用流操纵器

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

您需要包括<iomanip>.

于 2012-09-10T15:35:07.553 回答
6

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

double a = 34.34566535;
std::stringstream precisionValue;
precisionValue.precision(6);
precisionValue << a << std::endl;
于 2012-09-10T15:34:40.687 回答
3

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

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

或者使用setprecisionIO 操纵器链接调用:

precisionValue << setprecision(6) << a;
std::cout << precisionValue.str() << std::endl;
于 2012-09-10T15:36:42.227 回答
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();
}
于 2012-09-10T15:36:35.177 回答