BigDecimalUtil.java 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package org.ccframe.commons.util;
  2. import java.math.BigDecimal;
  3. import java.math.MathContext;
  4. /**
  5. *
  6. * 用于数值加减运算。保留8位精度。
  7. * @author JIM
  8. *
  9. */
  10. public class BigDecimalUtil {
  11. private BigDecimalUtil() {
  12. }
  13. private static final int MAX_PRECISION = 8;
  14. /**
  15. * 输入多个数字进行相乘
  16. * @param values
  17. * @return
  18. */
  19. public static Double multiply(Number... values) {
  20. BigDecimal result = new BigDecimal(1);
  21. for (Number v : values) {
  22. if(v==null){
  23. continue;
  24. }
  25. result = result.multiply(new BigDecimal(String.valueOf(v)), MathContext.DECIMAL64);
  26. }
  27. return result.setScale(MAX_PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
  28. }
  29. /**
  30. * 输入多个数字进行相加
  31. * @param values
  32. * @return
  33. */
  34. public static Double add(Number... values) {
  35. BigDecimal result = BigDecimal.ZERO;
  36. for (Number v : values) {
  37. if(v==null){
  38. continue;
  39. }
  40. result = result.add(new BigDecimal(String.valueOf(v)), MathContext.DECIMAL64);
  41. }
  42. return result.setScale(MAX_PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
  43. }
  44. /**
  45. * 前面减后面
  46. * @param start
  47. * @param end
  48. * @return
  49. */
  50. public static Double subtract(Number start, Number end) {
  51. BigDecimal result = new BigDecimal(String.valueOf(start==null?0:start)).subtract(new BigDecimal(String.valueOf(end==null?0:end)));
  52. return result.setScale(MAX_PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
  53. }
  54. /**
  55. * 前台除后面
  56. * @param start
  57. * @param end
  58. * @return
  59. */
  60. public static Double divide(Number start, Number end) {
  61. BigDecimal result = new BigDecimal(String.valueOf(start==null?0:start)).divide(new BigDecimal(String.valueOf(end)), MathContext.DECIMAL32);
  62. return result.setScale(MAX_PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
  63. }
  64. /**
  65. * @param decimalDigit
  66. * @param value
  67. * @return
  68. */
  69. public static Double roundHalfUp(int decimalDigit, Number value) {
  70. return new BigDecimal(String.valueOf(value == null ? 0: value)).setScale(decimalDigit, BigDecimal.ROUND_HALF_UP).doubleValue();
  71. }
  72. }