一、丢失精度问题还原。
public double add() {
double number1 = 1;
double number2 = 20.2;
double number3 = 300.03;
double result = number1 + number2 + number3;
System.out.println(result);
return result;
}
打印结果:321.22999999999996
二、解决方式。
BigDecimal num1 = new BigDecimal("100");
BigDecimal num2 = new BigDecimal("50");
// 或者
BigDecimal num1 = new BigDecimal(100D);
BigDecimal num2 = new BigDecimal(50D);
//加法
BigDecimal result1 = num1.add(num2);
out.println("和是 : " + result1);
//减法
BigDecimal result2 = num1.subtract(num2);
out.println("差是 : " + result2);
//乘法
BigDecimal result3 = num1.multiply(num2);
out.println("积是 : " + result3);
//除法
BigDecimal result4 = num1.divide(num2);
out.println("商是 : " + result4);
//比较
BigDecimal num = new BigDecimal("100"); //用做比较的值
out.println(num1.compareTo(num2)); //大于 时,返回 1
out.println(num.compareTo(num1)); //等于 时,返回 0
out.println(num2.compareTo(num1)); //小于 时,返回 -1
out.println(num1.min(num2)); //求两个数的最小值,返回小的数
out.println(num1.max(num2)); //求两个数的最大值,返回大的数
三、注意
在阿里巴巴手册中这样定义: