记录BigDecimal的一些应用,BigDecimal对超过16位有效位的数提供了精确的运算支持。
BigDecimal num1 = new BigDecimal("5"); // String 推荐使用 BigDecimal num2 = new BigDecimal(5); // int BigDecimal num3 = new BigDecimal(2147483648L); // Long BigDecimal num4 = new BigDecimal(new Double("12.12")); // Double 不推荐使用,精度丢失 System.out.println(num1); // 5 System.out.println(num2); // 5 System.out.println(num3); // 2147483648 System.out.println(num4); // 12.1199999999999992184029906638897955417633056640625
BigDecimal num1 = new BigDecimal("5"); BigDecimal num2 = new BigDecimal("2"); // 加法 System.out.println(num1.add(num2)); // 7 // 减法 System.out.println(num1.subtract(num2)); // 3 // 乘法 System.out.println(num1.multiply(num2)); // 10 // 除法 System.out.println(num1.divide(num2)); // 2.5
/** * 大小比较 * compare = -1,表示num1小于num2; * compare = 0,表示num1等于num2; * compare = 1,表示num1大于num2; */ int compare = num1.compareTo(num2); System.out.println(compare); // 1
BigDecimal num1 = new BigDecimal("1"); BigDecimal num2 = new BigDecimal("3"); System.out.println(num1.divide(num2)); // 0.333333333333
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
System.out.println(num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP));
保留模式 | 说明 |
---|---|
ROUND_CEILING | 向正无穷方向舍入 |
ROUND_FLOOR | 向负无穷方向舍入 |
ROUND_HALF_UP | 四舍五入 |
ROUND_HALF_DOWN | 五舍六入 |
ROUND_HALF_EVEN | 银行家算法,四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一 |
ROUND_UNNECESSARY | 无需舍位 |
ROUND_UP | 向远离零的方向舍入 |
ROUND_DOWN | 向零方向舍入 |