将字符串读入float会产生不正确的精度

时间:2014-07-27 18:20:03

标签: c++ floating-point floating-accuracy floating-point-precision

现在我理解float的准确度低于double,但这可以解释我何时拥有std::string

"7.6317"

我做了:

float x = atof(myString.c_str());
预计得到7.63170004?有什么方法可以告诉x的分配只读取前4位小数?或者这是因为浮动表示存储数字7.6317的方式?

3 个答案:

答案 0 :(得分:0)

某些浮点文字在计算机中没有准确的表示形式,即使 - 以十进制表示法 - 数字似乎无害。这是因为计算机使用2作为基础。因此,即使一个数字在基数10中可能具有有限的表示,它也可能在基数2中没有。

答案 1 :(得分:-1)

是。这是预料之中的。这就是所谓的浮点错误。

答案 2 :(得分:-1)

你可以这样做:

float x = floorf(val * 10000) / 10000;

我觉得应该有用!见See