提问人: 提问时间:6/16/2020 最后编辑:Torxed 更新时间:6/16/2020 访问量:82
为什么在两种情况下比较浮点数的输出不同
Why is the output different in both cases comparing floats
问:
PYTHON程序:
a = 0.2
if a == 0.2:
print('*')
输出:
*
C程序:
#include <stdio.h>
int main(void)
{
float a = 0.2;
if(a == 0.2)
{
puts("*");
}
}
输出:
为什么两种情况下的输出不同?操作员的工作有区别吗?==
答:
3赞
Vlad from Moscow
6/16/2020
#1
这是因为 float 和 double 类型为尾数保留了不同的宽度。double 类型可以更精确地表示浮点数。在这种情况下,这很重要,因为 0.2 不能准确表示,并且在存储为双精度和浮点数时表示形式略有不同。
在条件
if(a == 0.2)
左操作数的类型为 float,而右操作数的类型为 double,因为 C 中带有“.”的数字文字的默认类型是双精度值。
因此,请按以下方式更改声明
double a = 0.2;
或者更改条件,例如
if(a == 0.2f)
这是一个演示程序
#include <stdio.h>
int main(void)
{
float a1 = 0.2;
if ( a1 == 0.2f )
{
puts( "*" );
}
double a2 = 0.2;
if ( a2 == 0.2 )
{
puts( "*" );
}
}
它的输出是
*
*
上一个:不获取任何输出(预期布尔输出)
评论
a == 0.2
if(a == 0.2f) { .. }