写了一个输入浮点型数输出该数有几位小数的程序但是结果一直有问题

问题描述:

这是最后输出的结果 我不知道那个0.400001是怎么来的

img

#include <stdio.h>

int main(){

float x,m;
int i=1;
scanf("%f",&m);

int c=(int)m;
x=m-c;
while((x10-(int)(x10))!=0){
printf("%f\n",x);
x=x10-(int)(x10);

i++;

}
printf("小数有%d位\n",i);
return 0;
}

你最好当字符串接收,不然浮点数是有精度问题,不好计算有多少位小数
当字符串接收,找到小数点,然后看小数点后面还有几个字符就行了

浮点数有精度损失,很多小数在二进制下实际上是无限循环小数,比如0.1这种,所以后面会有很多0

要判断两个单精度浮点数是否相等:

if(fabs(f1_float - f2_float) <= 1e-6)