将string读入到float会产生不正确的精度

Reading string in to float produces incorrect accuracy

本文关键字:不正确 精度 float string      更新时间:2023-10-16

现在我明白float s比double更不准确,但这是否解释了当我有std::string:

"7.6317"

and I do:

float x = atof(myString.c_str());

预期得到7.63170004 ?有没有办法让x的赋值只读取小数点后4位?或者这是因为浮点表示存储数字7.6317的方式?

是。这是意料之中的。这就是所谓的浮点误差。

一些浮点数在计算机中没有精确的表示,即使——用十进制表示——这些数字似乎是无害的。这是因为计算机使用2作为基数。因此,即使一个数字在以10为基数时可能有有限的表示,它在以2为基数时可能没有。

你可以这样做:

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

我认为它应该工作!看看