我使用以下代码将输入字符串转换为浮点数:
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“,这显然是错误的。有什么想法吗?
发布于 2013-07-16 05:10:59
single-precision浮点数据类型精确到大约8-9个十进制数字。您打印的是12位数字,因此可以预期最后三位将被关闭。
之所以有任何区别,是因为1/10不能精确地表示为二进制分数;关于这个问题,这个网站上有几十个问题有很好的答案。最接近1/10的单精度值恰好是0.100000001490116119384765625。
https://stackoverflow.com/questions/17663955
复制相似问题