istringstream无法正确解析

时间:2013-07-15 21:07:49

标签: c++

我使用以下代码将输入字符串转换为浮点数:

template <typename T>
T parseString(const std::string &s)
{
    T val;
    std::istringstream is(s.c_str());
    is >> val;

    return val;
}

float x = parseString<float>("0.1");
std::cout << std::setprecision(12) << x;

当我打印x时,我得到“0.10000000149”,这显然是错误的。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

single-precision浮点数据类型精确到大约8-9个十进制数字。您正在使用12位数字进行打印,因此您可以预期最后三位数字将被关闭。

之所以存在任何差异,原因在于1/10不能完全表示为二进制分数;关于这个问题,本网站上有很多问题都有很好的答案。最接近1/10的单精度值恰好是0.100000001490116119384765625。