public class A { public static void main(String[] args) {
double a1 = 1.3;
double a2 = 2.1;
double a3 = 1.2;
System.out.println(a1 + a2 + a3);
}

}
非常简单的代码
不过大家自己去看执行结果。
是不是和自己预期的有点不一样呢?
我不是想证明什么,只是想说,如果以后在项目中会用到浮点数的加法的时候,记得一定要限制结果的位数,不然能会出现你我都预想不到的结果的哦!PS:我是在写JavaScript代码的时候出现的小bug,然后就想到会不会是JAVA本身的问题,结果一实验,果然。
再PS:把其中的数字换一换试试,比如把最后的1.2换成1.3~
最后PS:原理是基于JAVA的浮点加法的底层实现机制,可能在各个版本的JDK或者不同的平台上面会有差异,这个应该是程序员无法控制的,所以只能通过加强代码(限制结果位数等)来控制bug的出现。
最最后PS:我的jdk版本是jdk1.5.0_12  系统是XP SP3

解决方案 »

  1.   

    这里牵扯到java中如何存储浮点型数据的问题,操作这类数据时建议使用Bigdecimal等类!
      

  2.   

    我来贴一个格式化了的
    public class Test {
       
    public static void main(String[]args){
    DecimalFormat format = new DecimalFormat();
        double a1 = 1.3;
            double a2 = 2.1;
            double a3 = 1.2;
            format.applyPattern("0.0");
            System.out.println(  format.format(a1 + a2 + a3));
    }}
    输出 : 4.6