0

在执行此步骤时,If实际上它应该来自else

#include<stdio.h>
void main()
{
 float a=0.9;
 clrscr();
 if(a<0.9)
  printf("value from if a %f",a);
 else
  printf("value from else a %f",a);
getch();

}

上述代码的输出来自 If。

只需检查以下代码,这将正确输出到其他部分

#include<stdio.h>
void main()
{
 float a=0.8;
 clrscr();
 if(a<0.8)
  printf("value from if a %f",a);
 else
  printf("value from else a %f",a);
 getch();
}

上述代码的输出来自else.

我试过 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9

0.7,0.9 只去if别人去else

请解释这种变化。

4

1 回答 1

0

根据 IEEE 格式,浮点数存储为 2 的幂。这是浮点数比较的常见问题。

尝试通过添加 .f 来更改您的代码

#include<stdio.h>
void main()
{
 float a=0.9f;
 clrscr();
 if(a<0.9f)
  printf("value from if a %f",a);
 else
  printf("value from else a %f",a);
getch();

}

否则,您需要有多少精度进行比较。您可以使用 delta (const float delta = 0.000001;) 并通过比较添加/减去该值。就像页面上给出的:

http://www.softwareandfinance.com/CPP/FAQ_Floating_Point.html

于 2013-11-18T19:09:01.140 回答