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
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
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