- 论坛徽章:
- 0
|
小弟写了个函数,结果出一问题让我很费解.请高手帮忙看看.
int main()
{
double out=0.00;
out=16.985;
printf("1111 [%.5f]\n", out);
turn_money(&out);
printf("2222 [%.5f]\n", out);
return 0;
}
int turn_money(double *mon)
{
int i,adjust0;
double adjust1;
double tmp=0.00;
adjust0=1;
adjust1=0.5;
i=2;
while ( i != 0 )
{
adjust0=adjust0*10;
adjust1=adjust1*0.1;
i--;
}
*mon=floor( (*mon + adjust1) * adjust0 ) / adjust0;
return 0;
}
结果打印出结果我晕了.
1111[16.98500]
2222[16.98000]
其实就相当于 floor( (16.985 + 0.005) * 100 ) / 100 = 16.98
另外我用out=16.885,得出的结果就对[16.89],等等我换了N个数,只有16.985错.
请高手帮看看,谢谢!!!
[ 本帖最后由 guaiguaixo 于 2008-12-24 17:50 编辑 ] |
|