java中浮点数的比较
不能用“==”直接比较
原因:
float和double类型都不能用于严格要求精度的计算,这是因为float和double类型使用的都是IEEE 754标准,而这种标准的表示范围和表示精度有限,根据标准,将不能表示的范围舍去。所以,任何整数都可以通过二进制表达出来,但是小数往往不能通过二进制精确表达。
具体比较方法
1.Math.abs (a-b)<1e-6
2.BigDeimal方法
具体实现:
public class Main {
public static void main(String[] args) {
//使用==
System.out.println(0.1*3==0.3);
//使用Math.ads()
System.out.println(Math.abs(0.3-0.1*3)<1e-6);
//使用BigDecimal
BigDecimal a = new BigDecimal("0.3");
BigDecimal b = new BigDecimal("0.3");
if(a.equals(b)){
System.out.println("true");
}
}
结果:
false
true
true