这个涉及到浮点数在计算机中的存储问题。可以测试如下程序:
# include <stdio.h>
int main(void)
{
float i = 4.3123999;
if (i - 4.3123999==0)
printf("i为零。\n");
else
printf("i不为零。\n");
return 0;
}
输出结果为:i不为零。
这是因为浮点数在计算机中的存储精度问题,浮点数不能准确存储一个小数,具体可见《C语言学习笔记》。
测试程序2:
# include <stdio.h>
int main(void)
{
double i = 0.00000001;
printf("i = %lf\n", i);
return 0;
}
/*
2012年12月11日23:56:51
结果为i = 0
验证了浮点数不能准确存储一个小数。
*/
那么,如何判断一个浮点数是否为0呢?
程序如下:
# include <stdio.h>
int main(void)
{
float i = 0;
/*if (0 == 0)
printf("是零!\n");
else
printf("不是零!\n"); //此方法错误!*/
if (i-0.000001 <= 0.000001)
printf("是零!\n");
else
printf("不是零!\n");
return 0;
}