菜鸟提问C语言中小问题

来源:百度知道 编辑:UC知道 时间:2024/05/07 02:30:18
#include<stdio.h>
main()
{
float data=0.2;

if (0.2==data)
printf("right data=%f",data);

else
printf("wrong data=%f",data);

getch();
}

为何运行以后结果为wrong?
如果改为double data=0.2 结果显示为right
这又是为什么呢?
double也是二进制保存啊

float data=0.2;

计算机是以二进制形式保存数据的,浮点型无法转换为二进制格式,所以以一种变通的方式将其转化为二进制,但是不能完全正确的表示它.
所以,比较float|double数据是否相等时,不应该直接使用"==",应该计算二者的差值在某个范围内,比如:
if (data - 0.2 < 0.000001 || 0.2 - data < 0.000001) {
//...
}