1、double 或者 float 存在的精度问题
当计算 1.03 - 0.42 时,按照常规得出的答案应该是 0.61
System.out.println(1.03 - 0.42 );
但是实际结果去确实 0.6100000000000001
0.6100000000000001
这显然不是我们需要的结果。若需要对带有小数点的数值进行精确计算,则需要使用 BigDecimal
。
2、使用 BigDecimal 改造
public static void subtract() {
// 实例化
BigDecimal num1 = new BigDecimal(1.03);
BigDecimal num2 = new BigDecimal(0.42);
/*
* setScale(int newScale, int roundingMode)
* 参数一:newScale 保留小数点几位
* 参数二:roundingMode 小数点保留的方式,比如 BigDecimal.ROUND_HALF_UP 就是四舍五入
*/
BigDecimal result = num1.subtract(num2).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(result);
}
结果
0.61