0

在对浮点值进行四舍五入时,我观察到值存在一些差异。我提取了以下部分代码。在这里,如果 variablevar_d分配了 value> 5.3 ,那么我得到了 variable 的正确值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;
}
4

2 回答 2

2

采用

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。

于 2013-05-16T12:01:08.807 回答
-1
float var_d=5.02;
long var_l;
var_l = (long)(float)(var_d*100);

这应该可以正常工作

于 2013-05-16T12:22:01.777 回答