我正在研究C中的一些"确定输出"问题.我遇到了这个看起来很简单的问题,但在运行代码后让我感到困惑.
我预期的输出是"真".但是在跑步时,它是"假的".当我使用printf()检查f的值时,它显示为0.1.有人可以解释一下为什么f被赋予0.1对于IF语句不会返回true?
从我选择问题的地方找不到答案,我自己也找不到答案.
#include <stdio.h>
int main()
{
float f = 0.1;
if (f == 0.1)
printf("True");
else
printf("False");
}
Run Code Online (Sandbox Code Playgroud)
问题是f
定义为具有float
浮点常量0.1
类型的变量具有类型double
.类型double
比类型更精确float
.它有更多的二进制数字来表示分数.所以在这个声明中
float f = 0.1;
Run Code Online (Sandbox Code Playgroud)
有一个截断.
为了得到预期的结果,你至少应该写
if (f == 0.1f)
Run Code Online (Sandbox Code Playgroud)
此外,为了确保没有舍入代码应该看起来像
#include <stdio.h>
int main( void )
{
float f = 0.1f;
if ( f == 0.1f )
printf("True\n");
else
printf("False\n");
}
Run Code Online (Sandbox Code Playgroud)