首页 > 代码库 > java金额的加减乘除

java金额的加减乘除

  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 }