使用10分割会产生错误的精度

时间:2014-04-03 17:10:24

标签: c++ c visual-c++

我的意图是对一个值进行舍入,但它会给出错误的输出

      float travellingEmptyDist = 2.05; 
travellingEmptyDist = round(travellingEmptyDist * 10); // gives value 21.0
travellingEmptyDist = travellingEmptyDist/ 10.0; // gives wrong value 2.09999, expecting 2.1

有没有办法纠正它

2 个答案:

答案 0 :(得分:1)

我建议观看此视频 Computerphile: Floating Points

它将为您提供一个非常简单的概述,说明为什么浮点本身不精确而不会涉及太多技术细节。我也有偏见,因为我爱上了数字。

你需要问自己,你真的需要额外0.00001的精度吗?如果你真的需要更高的精度,请使用double而不是float,但即便如此,你仍然会有舍入错误。

如果您需要更高的精度,您将不得不使用第三方精度算术库。我从来没有一个需要,但GMP似乎很受欢迎,基于谷歌搜索结果。

答案 1 :(得分:-3)

我尝试了你的代码片段。我得到2.1。不知道为什么你会得到2.09999。我用过gcc编译器。

#include <stdio.h>
#include <math.h>

int main()
{
    float travellingEmptyDist = 2.05;
    travellingEmptyDist = round( travellingEmptyDist * 10 ); // gives value 21.0
    travellingEmptyDist = travellingEmptyDist/ 10.0;

    printf("value: %f\n", travellingEmptyDist);

    return 0;
}