为什么控件进入"其他"部分?

use*_*308 -1 c

可能重复:
浮点数和浮点字面值比较浮点数和双重比较奇怪输出的最有效方法

int main() 
{
  float a = 0.8;
  if (a == 0.8)
    printf("x\n");
  else 
    printf("y\n");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然a等于0.8,但它输出y.

use*_*136 8

0.8不能在二进制浮点中准确表示.您的代码if (a == 0.8)基本上将单精度0.8与双精度0.8进行比较,它们不相等.

要自己查看,请尝试以下代码:

int main()
{
    double a = 0.8f;
    double b = 0.8;

    printf("%lX\n", *(long *)&a);
    printf("%lX\n", *(long *)&b);
}
Run Code Online (Sandbox Code Playgroud)

它输出:

3FE99999A0000000
3FE999999999999A
Run Code Online (Sandbox Code Playgroud)

  • printf是UB. (2认同)

sun*_*dar 6

if (a==0.8f)
Run Code Online (Sandbox Code Playgroud)

试试这个.默认情况下,类型被认为是double,相比之下有精度错误.