【问题标题】:"==" operator seeems not to work for floating point numbers [duplicate]“==”运算符似乎不适用于浮点数[重复]
【发布时间】:2022-01-11 13:37:19
【问题描述】:
有人可以在这里解释一下输出吗?
#include <stdio.h>
int main(void) {
float f = 0.1 ;
printf ("%f\n",f ) ;
if (f == 0.100000) {
printf ("true ") ;
}
else {
printf ("False") ;
}
return 0;
}
输出:
0.100000
False
【问题讨论】:
标签:
c
if-statement
floating-point
comparison-operators
【解决方案1】:
您正在尝试将float 号码与double 进行比较。数字 0.100000 被视为 doubletype 除非您在结尾处指定 f 表示它是 float. 因此:
int main(){
float x = 0.100000;
if (x == 0.100000)
printf("NO");
else if (x == 0.100000f)
// THE CODE GOES HERE
printf("YES");
else
printf("NO");
}
理论细节请参考single precision 和double precision
【解决方案2】:
float 和 double 类型的对象以不同的精度存储。
你应该写
if (f == 0.100000f) {
试图比较两个浮点数。
另外,最好用浮点类型的常量初始化变量 f
float f = 0.1f;
【解决方案3】:
0.100000 默认是双精度,试试0.100000f。如果您需要与 double 进行比较,则需要尝试 here 描述的内容。