在我们用浮点数进行运算时,如果只是用double类型的数据进行相加或相除时容易出现精度丢失的问题,Java中给我们提供了一个类用于处理这个问题,它是BigDecimal类,在这个包下:java.math.BigDecimal
下面看段代码,了解使用:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo {
public static void main(String[] args) {
//bigdecimal用于解决浮点型运算失真问题
BigDecimal b1 = new BigDecimal("0.2");
BigDecimal b2 = BigDecimal.valueOf(0.1);
//在ali的Java开发文档中指明将浮点数类型转换成BigDecimal类型要用这两种方法,才能确保精度不被丢失
System.out.println(b1.add(b2));//加法
System.out.println(b1.subtract(b2));//减法
System.out.println(b1.divide(b2));//除法
System.out.println(b1.multiply(b2));//乘法
//如果说除的结果是除不尽的数,直接用BigDecimal的运算的话就会崩溃,但是可以调用divide的另一种重构方法,使它精确到小数点几位
double d1 = 10.0;
double d2 = 3.0;
BigDecimal b3 = BigDecimal.valueOf(d1);
BigDecimal b4 = BigDecimal.valueOf(d2);
//System.out.println(b3.divide(b4));//这样就会崩
System.out.println(b3.divide(b4, 2, RoundingMode.HALF_UP));//四舍五入保留两位小数
}
}