| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package com.steerinfo.ems.Utils;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- public class BigDecimalUtil {
- // 默认除法运算精度
- private static final Integer DEF_DIV_SCALE = 2;
-
- /**
- * 提供精确的加法运算。
- *
- * @param value1 被加数
- * @param value2 加数
- * @return 两个参数的和
- */
- public static BigDecimal add(Double value1,Double value2 ) {
- BigDecimal b1 = new BigDecimal(Double.toString(value1));
- BigDecimal b2 = new BigDecimal(Double.toString(value2));
- return b1.add(b2);
- }
-
- /**
- * 减法
- * @param value1
- * @param value2
- * @return
- */
- public static BigDecimal sub(Double value1,Double value2) {
- BigDecimal b1 = new BigDecimal(Double.toString(value1));
- BigDecimal b2 = new BigDecimal(Double.toString(value2));
- return b1.subtract(b2);
- }
-
- /**
- * 提供精确的乘法运算。
- *
- * @param value1 被乘数
- * @param value2 乘数
- * @return 两个参数的积
- */
- public static BigDecimal mul(Double value1,Double value2) {
- BigDecimal b1 = new BigDecimal(Double.toString(value1));
- BigDecimal b2 = new BigDecimal(Double.toString(value2));
- return b1.multiply(b2);
- }
-
- public static Float mul(Float value1,Float value2) {
- BigDecimal b1 = new BigDecimal(Float.toString(value1));
- BigDecimal b2 = new BigDecimal(Float.toString(value1));
- return b1.multiply(b2).floatValue();
- }
-
- public static int mulOneHundred(Double value1) {
- BigDecimal b1 = new BigDecimal(Double.toString(value1));
- BigDecimal b2 = new BigDecimal(Double.toString(100));
- return b1.multiply(b2).intValue();
- }
-
- /**
- * 提供(相对)精确的除法运算。 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。
- *
- * @param dividend
- * 被除数
- * @param divisor
- * 除数
- * @param scale
- * 表示表示需要精确到小数点以后几位。
- * @return 两个参数的商
- */
- public static BigDecimal divide(Double dividend, Double divisor, Integer scale) {
- if (scale < 0) {
- throw new IllegalArgumentException("The scale must be a positive integer or zero");
- }
- BigDecimal b1 = new BigDecimal(Double.toString(dividend));
- BigDecimal b2 = new BigDecimal(Double.toString(divisor));
- try {
- BigDecimal sum = b1.divide(b2, scale, RoundingMode.HALF_UP);
- return sum;
- } catch (ArithmeticException e) {
- return BigDecimal.ZERO;
- }
- }
-
- public static Float divide(Float dividend, Float divisor, Integer scale) {
- if (scale < 0) {
- throw new IllegalArgumentException("The scale must be a positive integer or zero");
- }
- BigDecimal b1 = new BigDecimal(Double.toString(dividend));
- BigDecimal b2 = new BigDecimal(Double.toString(divisor));
- try {
- b1.divide(b2, scale, RoundingMode.HALF_UP).floatValue();
- } catch (Exception e) {
- System.out.println("累计量为0");
- }
- return b1.divide(b2, scale, RoundingMode.HALF_UP).floatValue();
- }
-
- }
|