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 }
原文地址:https://www.cnblogs.com/tfgzs/p/3895546.html