[英]Rounding off floating point values
在四舍五入浮点值时,我发现值存在一些差异。 我已经提取了以下部分代码。 在这里,如果给变量var_d
赋值> 5.3,那么我将为变量var_d
获得适当的值,但是对于5.01和5.02这样的值,我分别获得500和501。
#include<stdio.h>
int main()
{
double var_d=5.02;
long var_l;
var_l = (double)(var_d*100);
printf("var_d : %f var_l= %ld\n ",var_d,var_l);
printf("result : %ld\n",var_l);
return 0;
}
采用
double var_d=5.02;
long var_l = rint(var_d*100);
由于100 * 5.02并不完全等于502,因此您需要四舍五入。
更清楚一点:5.02在二进制浮点数中没有确切的表示形式。 因此, var_l*100 == 5.02*100
并非完全为502。实际上,它更接近501.99999999999994。 将其转换为整数时,将四舍五入为501。
float var_d=5.02;
long var_l;
var_l = (long)(float)(var_d*100);
这应该正常工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.