c语言菜鸟超简单问题///

来源:百度知道 编辑:UC知道 时间:2024/06/24 15:37:44
/*3 输入一个三位数,分别求出该数的个位数字,十位数字和百位数字.*/
#include<stdio.h>
void main()
{
float a,b,c,d;
printf("请输入一个三位数\n");
scanf("%f",&a);
b=a/100;
c=(b-(int)b)*10;
d=(c-(int)c)*10;
printf("该数的个位数字%d\n",(int)d);
printf("该数的十位数字%d\n",(int)c);
printf("该数的百位数字%d\n",(int)b);
}
为什么打445时有错?
-

好奢侈的写法X.X....

5是不能被2整除的,所以十进制的有限小数反映到2进制上就可能是无限的。而计算机不可能存储无限的内容,所以4.45保存的时候只是个近似值。而你这里直接(int)强制转换是舍去小数部分,把误差彻底扩大化了。