BigDecimal进行浮点数比较
java.math包下面有两个有用的类:Biginteger和BigDecimal,这两个类可以处理任意长度的数值,BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。
Demo:(使用BigDecimal进行浮点数比较)
import java.math.BigDecimal;
public class Main{
public static void main(String[] args){
BigDecimal bd = BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd);//0.5
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1);//0.500000000000000001
}
}
浮点数存在舍入误差,数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
避免比较中使用浮点数,需要比较请使用BigDecimal类。