浮动比较

时间:2015-05-24 06:09:00

标签: java c

用C语言

float a=0.1;

if(a==.1)
  printf("hello");
else
 printf("123");

输出为123

但是对于Java

float a=0.1F;

if(a==.1)
  System.out.println("hello");
else
  System.out.println("123");

Ans是hello

为什么?

2 个答案:

答案 0 :(得分:1)

此处==比较首先将float转换为double,然后比较两个值。

float real = 0.1f;
double real2 = real;
System.out.println(real2);

<强> 输出

0.10000000149011612

现在,您可以看到将float转换为double以获取值0.1时,您将无法获得此处的确切值。此处系统会将您的float值转换为double,并在数据中使用额外精度。

当你写if(a==.1) a0.10000000149011612将被转换为0.1,而不是与已经double的{​​{1}}进行比较具有确切的值0.1,因此结果为false,并且必须打印123而不是hello我确定。

答案 1 :(得分:0)

你比较苹果和橘子。在Java情况下,您应该使用

if (a == 0.1F)