|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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倒是会降低精度呢
|
|