【问题标题】:Convert a number from stringstream to string with a set precision将字符串流中的数字转换为具有设定精度的字符串
【发布时间】:2012-09-10 15:31:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ precision significant-digits


    【解决方案1】:

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

    你可以使用stream manipulators:

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

    您需要包含&lt;iomanip&gt;

    【讨论】:

      【解决方案2】:

      std::stringstream::precision() 返回一个streamsize,而不是对流本身的引用,如果你想对&lt;&lt; 操作符进行排序,这是必需的。这应该有效:

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          【解决方案4】:

          您可以使用来自标头&lt;iomanip&gt;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();
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-24
            • 2014-06-11
            • 2011-08-11
            • 1970-01-01
            相关资源
            最近更新 更多