123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- package com.fjhx.utils;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- public class BigDecimalUtil {
- private BigDecimalUtil() {
- }
-
- public static BigDecimal keepDecimals(Object value, int scale) {
- if (value == null) {
- return BigDecimal.ZERO.setScale(scale, RoundingMode.HALF_UP);
- }
- return (objToBigDecimal(value)).setScale(scale, RoundingMode.HALF_UP);
- }
-
- public static BigDecimal keepDecimals(Object value) {
- if (value == null) {
- return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
- }
- return (objToBigDecimal(value)).setScale(2, RoundingMode.HALF_UP);
- }
-
- public static BigDecimal add(Object v1, Object v2) {
- return objToBigDecimal(v1).add(objToBigDecimal(v2));
- }
-
- public static BigDecimal subtract(Object v1, Object v2) {
- return objToBigDecimal(v1).add(objToBigDecimal(v2));
- }
-
- public static BigDecimal multiply(Object v1, Object v2) {
- return objToBigDecimal(v1).multiply(objToBigDecimal(v2));
- }
-
- public static BigDecimal divide(Object v1, Object v2, int scale) {
- return objToBigDecimal(v1).divide(objToBigDecimal(v2), scale, RoundingMode.HALF_UP);
- }
-
-
- private BigDecimal bigDecimal;
-
- public static BigDecimalUtil init() {
- BigDecimalUtil bigDecimalUtil = new BigDecimalUtil();
- bigDecimalUtil.bigDecimal = BigDecimal.ZERO;
- return bigDecimalUtil;
- }
-
- public static BigDecimalUtil init(Object value) {
- BigDecimalUtil bigDecimalUtil = new BigDecimalUtil();
- bigDecimalUtil.bigDecimal = objToBigDecimal(value);
- return bigDecimalUtil;
- }
-
- public BigDecimalUtil add(Object value) {
- bigDecimal = bigDecimal.add(objToBigDecimal(value));
- return this;
- }
-
- public BigDecimalUtil subtract(Object value) {
- bigDecimal = bigDecimal.subtract(objToBigDecimal(value));
- return this;
- }
-
- public BigDecimalUtil multiply(Object value) {
- bigDecimal = bigDecimal.multiply(objToBigDecimal(value));
- return this;
- }
-
- public BigDecimalUtil divide(Object value, int scale) {
- bigDecimal = bigDecimal.divide(objToBigDecimal(value), scale, RoundingMode.HALF_UP);
- return this;
- }
-
- public BigDecimalUtil divideTry(Object value, int scale) {
- BigDecimal bigDecimal = objToBigDecimal(value);
- if (bigDecimal.compareTo(BigDecimal.ZERO) == 0) {
- return this;
- }
- this.bigDecimal = this.bigDecimal.divide(bigDecimal, scale, RoundingMode.HALF_UP);
- return this;
- }
-
- public BigDecimal getValue() {
- return bigDecimal;
- }
-
- public BigDecimal getValue(int scale) {
- return bigDecimal.setScale(scale, RoundingMode.HALF_UP);
- }
-
- public static BigDecimal objToBigDecimal(Object value) {
- if (value == null) {
- throw new NullPointerException("参与计算的字段为空");
- }
- BigDecimal bd;
- if (value instanceof BigDecimal) {
- bd = (BigDecimal) value;
- } else if (value instanceof String) {
- bd = new BigDecimal((String) value);
- } else if (value instanceof Float) {
- bd = BigDecimal.valueOf((float) value);
- } else if (value instanceof Double) {
- bd = BigDecimal.valueOf((Double) value);
- } else if (value instanceof Integer) {
- bd = BigDecimal.valueOf((Integer) value);
- } else if (value instanceof Long) {
- bd = BigDecimal.valueOf((Long) value);
- } else {
- throw new ArithmeticException("未知的计算类型");
- }
- return bd;
- }
- }
|