舍入浮点值

时间:2013-05-16 11:58:05

标签: c floating-accuracy

在舍入浮点值的同时,我观察到了一些值的差异。我已经提取了以下部分代码。如果变量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;
}

2 个答案:

答案 0 :(得分:2)

使用

double var_d=5.02;
long var_l = rint(var_d*100);

由于100 * 5.02并不完全等于502,因此您将向下舍入。

更清楚:5.02在binary floating point中没有确切的表示。因此var_l*100 == 5.02*100并不完全是502.实际上它更接近于501.99999999999994。将它强制转换为整数时,会向下舍入为501。

答案 1 :(得分:-1)

float var_d=5.02;
long var_l;
var_l = (long)(float)(var_d*100);

这应该可以正常使用