0

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

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”,这显然是错误的。有什么想法吗?

4

1 回答 1

2

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

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

于 2013-07-15T21:10:58.817 回答