繁体   English   中英

四舍五入浮点值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM