马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
动动手里面的第二题,因为这一节主要是讲for我就想试一下用for来做这个题,发现一个问题,当输入浮点数如2.2的时候,
我设置了一个判断,当输入‘.'的时候会设置一个k=0.1的值,
然后后面再判断当k==0.1的时候,实现浮点数的转换
但是实际测试结果是始终进不去if (k==0.1)的语句中,见下图,虽然k已经为0.1了,但是if (k==0.1)结果是为false
我的代码如下#include <stdio.h>
#include <math.h>
int main(){
float num=0;
int ch,count=1;
float k=1;
printf("请输入合法的数字:");
for (;;)
{
ch=getchar();
if (ch=='\n'){
printf("请输入合法的数字:");
k=1;
}
else {
if (ch=='q') break;
else {
if (ch=='.') {k=0.1;printf("%f\n",k);
}
if (ch>='a'&&ch<='z') {
k=1;count=1;printf("2\n");}
if (ch>='0'&& ch <='9')
{
if (k==0.1) {
num = num + (ch - '0')*pow(k,count);
count++;
printf("1\n");
}
else{
num = num + (ch - '0');
printf("2 %f\n",k);
}
}
}
}
}
printf("结果是:%f\n",num);
return 0;
}
浮点数不能用"=="比较是否相等。
因为计算机存储的精度问题,导致一个数存入计算机之后再读出来就和原值不一样的。
0.1存进去之后在读出来就不是0.1了,很接近0.1,但是有误差
浮点数比较相等一般是 (k-0.1<0.00001)这里0.00001也可以更小,看你的精度要求了。不过float有效位数只有8位,若位数写的再多,就没有相等的数了。
一般不建议判断浮点数相等
你的程序中k就是个标记,完全可以定义成int,在pow那里直接写0.1,而不必写k,写k倒是会降低精度呢
|