MyException - 我的异常网
当前位置:我的异常网» C语言 » float类型变量输入跟输出值不一致

float类型变量输入跟输出值不一致

www.MyException.Cn  网友分享于:2013-02-20  浏览:101次
float类型变量输入和输出值不一致?
最近编程遇到一个问题:float类型变量输入和输出的值不一样??
代码如下:

#include <stdio.h>

int main()
{
float a;

scanf("%f", &a);
printf("%f\n",a);

return 0;
}

运行结果:
569.261
569.260986
press any key to continue_

菜鸟求解。。

------解决方案--------------------
记得C语言一开始就是学的二进制数
自己看看10进制小数转二进制的公式吧
小数部分乘以2,结果去掉整数部分,反复运算
算一算吧,0.261是算不尽的(不断乘以2也没法得到一个整数),况且float是有位数长度限制的
------解决方案--------------------
引用:
引用:记得C语言一开始就是学的二进制数
自己看看10进制小数转二进制的公式吧
小数部分乘以2,结果去掉整数部分,反复运算
算一算吧,0.261是算不尽的(不断乘以2也没法得到一个整数),况且float是有位数长度限制的
哦。。。
那如何避免这种问题呢?


首先,希望楼主明确计算机数据的浮点表示和整数表示的数据编码方式是不一样的,计算机表示浮点数会存在一定误差。
正是由于计算机表示浮点数存在误差,因此在进行两个浮点数之间的比较时就不能像整数之间比较大小一样直接使用符号:大于,小于,等于了,下面举例说明


先说整数比较大小,比如比较两个int数据a,b的大小,很常见:
if(a > b) {
   a大于b
}

if(a < b) {
   a小于b
}
下面看浮点数,因为浮点数存在误差,因此不能直接用上面的方法比较大小,
还是假设有两个浮点数a,b:
if((a - b) > 0.00001) {
    a大于b,后面的0.00001的精度取决于当前系统的精度
}
小于的表示相信楼主能猜到了,但是判断浮点数是否相等有一点复杂,这就留给楼主思考了。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有