1 package com.wedge.edp.framework.common.util; 2 3 import java.math.BigDecimal; 4 5 /** 6 * 金额的加减乘除 7 */ 8 public class MathMoney { 9 private static final int DEF_DIV_SCALE = 10; 10 11 //这个类不能实例化 12 private MathMoney() { 13 } 14 15 /** 16 * 提供精确的加法运算。 17 * @param v1 被加数 18 * @param v2 加数 19 * @return 两个参数的和 20 */ 21 public static String add(String v1, String v2) { 22 BigDecimal b1 = new BigDecimal(v1); 23 BigDecimal b2 = new BigDecimal(v2); 24 return b1.add(b2).toString(); 25 } 26 27 /** 28 * 提供精确的减法运算。 29 * @param v1 被减数 30 * @param v2 减数 31 * @return 两个参数的差 32 */ 33 public static String sub(String v1, String v2) { 34 BigDecimal b1 = new BigDecimal(v1); 35 36 BigDecimal b2 = new BigDecimal(v2); 37 38 return b1.subtract(b2).toString(); 39 } 40 41 /** 42 * 提供精确的乘法运算。 43 * @param v1 被乘数 44 * @param v2 乘数 45 * @return 两个参数的积 46 */ 47 public static String mul(String v1, String v2) { 48 BigDecimal b1 = new BigDecimal(v1); 49 BigDecimal b2 = new BigDecimal(v2); 50 return b1.multiply(b2).toString(); 51 } 52 53 /** 54 * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 55 * 小数点以后10位,以后的数字四舍五入。 56 * @param v1 被除数 57 * @param v2 除数 58 * @return 两个参数的商 59 */ 60 public static String div(String v1, String v2) { 61 return div(v1, v2, DEF_DIV_SCALE); 62 } 63 64 /** 65 * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 66 * 定精度,以后的数字四舍五入。 67 * @param v1 被除数 68 * @param v2 除数 69 * @param scale 表示表示需要精确到小数点以后几位。 70 * @return 两个参数的商 71 */ 72 public static String div(String v1, String v2, int scale) { 73 if (scale < 0) { 74 throw new IllegalArgumentException("The scale must be a positive integer or zero"); 75 } 76 BigDecimal b1 = new BigDecimal(v1); 77 BigDecimal b2 = new BigDecimal(v2); 78 return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString(); 79 } 80 81 /** 82 * 提供精确的小数位四舍五入处理。 83 * @param v 需要四舍五入的数字 84 * @param scale 小数点后保留几位 85 * @return 四舍五入后的结果 86 */ 87 public static String round(String v, int scale) { 88 if (scale < 0) { 89 throw new IllegalArgumentException("The scale must be a positive integer or zero"); 90 } 91 BigDecimal b = new BigDecimal(v); 92 BigDecimal one = new BigDecimal("1"); 93 return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).toString(); 94 } 95 96 public static String[] average() { 97 return null; 98 99 } 100 101 }