有时用float比double更精确
前段时间在论坛上有位朋友用double类型写了一个工资分解成钞票数量的程序,我简化了一下,如下:#include <stdio.h>
int main(void)
{
double sum;
int num;
double money[6]={100,50,10,5,0.5,0.1};
printf("请输入实发工资总额\n");
scanf("%lf",&sum);
for (int i=0;i<=5;i++)
{
num=(int)(sum/money[i]);
if(num>0)
printf("%f元%d张\n",money[i],num);
sum=sum-num*money[i];
}
}
输入2364.6
输出为:
100.000000元23张
50.000000元1张
10.000000元1张
0.500000元9张
而我将sum和money类型改为float后,程序如下:
#include <stdio.h>
int main(void)
{
float sum;
int num;
float money[6]={100,50,10,5,0.5,0.1};
printf("请输入实发工资总额\n");
scanf("%f",&sum);
for (int i=0;i<=5;i++)
{
num=(int)(sum/money[i]);
if(num>0)
printf("%f元%d张\n",money[i],num);
sum=sum-num*money[i];
}
}
输入:2364.6
输出为:
100.000000元23张
50.000000元1张
10.000000元1张
0.500000元9张
0.100000元1张
反而用float类型能输出完整。
用printf打印发现,用double类型时最后一次的num=0,而此时sum和money[i]都为0.10000,也就是说此时(int)(0.10000/0.10000)==0。
而用float类型则无此现象。在这个方面似乎float类型比double类型更精确。
也许大神有更好的解释。