用stringstream解析浮点数 - 精度?

时间:2014-10-16 09:35:08

标签: c++ std

我正在使用stringstream从字符串中解析float。

std::stringstream strs(cp.val);
strs.precision(5);
strs<<std::setprecision(5);
float x; strs>>x;

然而设定的精度功能似乎不起作用.. 有没有办法强制解析不打印精度?

2 个答案:

答案 0 :(得分:3)

precision(以及fixedscientific之类的内容)仅影响输出;输入将解析看起来像数值的任何内容,提取可能属于任何数值的所有字符。 (这包括十六进制字符和整数输入可能出现的&#39; X&#39;如果要以任何方式限制格式,您必须将其作为字符串读取,验证格式,然后使用std::istringstream进行转换。

答案 1 :(得分:1)

stringstram不允许解析时的精度,但您可以在解析后设置双精度。

E.g。

#include <iostream>
#include <sstream>
#include <iomanip>
#include <cmath>

using namespace std; //do not use that in real project.

int main()
{
    // Initial declarations
    stringstream ss("13.321646");
    double x = 0.0;

    // Parse the double
    ss >> x;
    // Set the double precision to 2decimals
    double roundedX = round(x*100)/100;

    // output solution
    cout << x << endl;
    cout << setprecision(5) << x << endl;
    cout << roundedX << endl;

    return 0;
}

明显的注意:这可以降低精度,而不是改善它。