double、float浮点数在进行数据基本运算时会发生数据丢失现象,这种情况不仅仅是在Java语言中,在其他语言中同样存在。
例如:
public void test(){
System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);
}
Java提供了BigDecimal类,用于处理进行基本运算发生的数据丢失问题。
使用BigDecimal构造器创建对象时,建议优先使用String类型对象作为参数传入进行初始化。
例如:
public void test1(){
BigDecimal b1 = new BigDecimal("4.015");
BigDecimal b2 = new BigDecimal("100");
// 加:add
System.out.println(b1.add(b2));
// 减:subtract
System.out.println(b1.subtract(b2));
// 乘:multiply
System.out.println(b1.multiply(b2));
// 除:divide
System.out.println(b1.divide(b2));
// 取绝对值:abs
System.out.println(b1.abs());
// 比大小:compareTo,小于:-1、等于:-1、大于:1。
System.out.println(b1.compareTo(b2));
// 取对数:negate
System.out.println(b1.negate());
// 取指数:pow
System.out.println(b1.pow(2));
}
源代码:
https://github.com/wolf521/demo/tree/master/src/main/java/com/example/demo/bigdecimal/test