java中浮点型小数之间运算引发的有关问题

java中浮点型小数之间运算引发的问题
今天做一个android计算器,在进行小数点运算时,发现一个好奇怪的事情。
事情是这样的,如下:
package aa;

import java.util.Random;

public class test{

public static void main(String[] args){

  float a=Float.parseFloat("3.546");
  float b=Float.parseFloat("7.852");
  float result=a+b;
  System.out.println(a);
  System.out.println(b);
  System.out.println(result);
}


}
a,b的答案肯定是知道的了,那么大家觉得result的结果会是多少呢?
大家再看一个运算,如下:
package aa;

import java.util.Random;

public class test{

public static void main(String[] args){

  float a=Float.parseFloat("3.546");
  float b=Float.parseFloat("7.853");
  float result=a+b;
  System.out.println(a);
  System.out.println(b);
  System.out.println(result);
}


}
我只是把 float b=Float.parseFloat("7.852");
改成了float b=Float.parseFloat("7.853");
也许大家觉得没什么不一样啊,呵呵,大家机上试试就能发觉异样了,那就是
当float b=Float.parseFloat("7.852");的时候
result的输出是11.398001
而当float b=Float.parseFloat("7.853");的时候
result的输出是11.399,这就奇怪了,怎么小数点的位数会不同了,更奇怪的是
当float b=Float.parseFloat("7.854");时,result=11.4,
这答案真是人才呀,这么智能,那大家知道这是怎么回事吗,知道的解释下哦
1 楼 luoqinglong 2012-07-02  
这是因为小数在计算机中转换为2进制的问题,转换规则是“乘2取整”,当小数一直无法取完时,二进制就会把变量的所有位都填充满,然后两个小数在二进制环境下相加,输出时和又转为十进制,所以出现你这样的结果了。对于这类问题,我们一般使用BigDecimal类进行加减乘除的运算。