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