PYTHON程序:
a = 0.2
if a == 0.2:
print('*')
OUTPUT:
*
C 方案:
#include <stdio.h>
int main(void)
{
float a = 0.2;
if(a == 0.2)
{
puts("*");
}
}
OUTPUT:
为什么两种情况下的产出不同?两者的工作是否有区别?==
操作符?
这是因为float和double类型为mantissa保留的宽度不同。double类型可以更精确地表示浮点数。在这种情况下,这一点很重要,因为0.2不能精确地表示,当以double和float存储时,其表示方法略有不同。
在条件中
if(a == 0.2)
左边操作数的类型是float,而右边操作数的类型是double,因为在C语言中带". "的数字文字的默认类型是double。
所以将声明改为如下方式
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( "*" );
}
}
它的产出是
*
*