可能重复:
与float文字的float比较中的奇怪输出
这是代码
#include<stdio.h>
int main()
{
float a=0.3;
if(a==0.3)
printf("Hello World!");
else
printf("Stack Overflow");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期望输出为"Hello World".但我得到了"堆栈溢出".为什么我没有得到"Hello World"?
if情况有什么不对吗?
浮点数学并不准确.像0.2这样的简单值无法使用二进制浮点数精确表示,浮点数的有限精度意味着操作顺序的微小变化可能会改变结果.不同的编译器和CPU架构以不同的精度存储临时结果,因此结果将根据您的环境的详细信息而有所不同.如果您进行计算,然后将结果与某个预期值进行比较,那么您很可能无法获得预期的结果.
试试这种方式:
#include<stdio.h>
int main()
{
float a=0.3;
float acceptedDiff = 0.0000001;
if(fabsf(a-0.3) < acceptedDiff)
printf("Hello World!");
else
printf("Stack Overflow");
return 0;
}
Run Code Online (Sandbox Code Playgroud)