BigDecimal

public class TestBigDecimal {
	public static void main(String[] args) {
		double d1 = 1.0;
		double d2 = 0.9;
		System.out.println(d1 - d2); // 0.09999999999999998

		// 面试题
		double result = (1.4 - 0.5) / 0.9;
		System.out.println(result); // 0.9999999999999999
	}
}

很多实际应用中需要精确存储, 而 double 是近似值存储, 不再符合要求, 需要借助 BigDecimal .

  • 位置: java.math 包中

  • 作用: 精确计算浮点数

  • 创建方式

    BigDecimal bd = new BigDecimal("1.0");
    

示例:

public class TestBigDecimal {
	public static void main(String[] args) {
		BigDecimal bd1 = new BigDecimal("1.0");
		BigDecimal bd2 = new BigDecimal("0.9");

		// 减法
		BigDecimal r1 = bd1.subtract(bd2);
		BigDecimal r2 = bd2.subtract(bd1);
		System.out.println(r1); // 0.1
		System.out.println(r2); // -0.1

		// 加法
		BigDecimal r3 = bd1.add(bd2);
		System.out.println(r3); // 1.9

		// 乘法
		BigDecimal r4 = bd1.multiply(bd2);
		System.out.println(r4); // 0.90

		// 除法
		BigDecimal r5 = new BigDecimal("1.4").subtract(new BigDecimal("0.5"))
				.divide(new BigDecimal("0.9"));
		System.out.println(r5); // 1
	}
}

除不尽的情况会报异常, 需要指定保留多少位小数

public class TestBigDecimal {
	public static void main(String[] args) {
        // 1.0/0.3
		BigDecimal result = new BigDecimal("1.0").divide(new BigDecimal("0.3"), 2, RoundingMode.HALF_UP);
		System.out.println(result); // 3.33
		
        // 20/3
		BigDecimal result2 = new BigDecimal("20").divide(new BigDecimal("3"), 2, RoundingMode.HALF_UP);
		System.out.println(result2); // 6.67
	}
}
posted @ 2021-08-01 16:02  脉望  阅读(75)  评论(0编辑  收藏  举报