我的意图是对一个值进行舍入,但它会给出错误的输出
float travellingEmptyDist = 2.05;
travellingEmptyDist = round(travellingEmptyDist * 10); // gives value 21.0
travellingEmptyDist = travellingEmptyDist/ 10.0; // gives wrong value 2.09999, expecting 2.1
有没有办法纠正它
答案 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;
}