importjava.math.BigDecimal
importjava.text.DecimalFormat
importjava.util.regex.Pattern
objectBigDecimalUtils {
private valfunm= createDecimalFormat()
private valpattern= Pattern.compile("[^-0-9.]")
/*** 金额相加*@method*@date: 2020/5/21 19:13*@author: moran*@paramvalueStr基础值*@paramaddStr被加数**@return金额*/funmoneyAdd(valueStr : String ,addStr : String): String{
valvalue = BigDecimal(formatMoney(valueStr))
valaugend = BigDecimal(formatMoney(addStr))
returnfunm.format(value.add(augend))
}
/*** 金额相加*@method*@date: 2020/5/21 19:13*@author: moran*@paramvalueStr基础值*@paramaddStr被加数*@paramfunm金额格式化类**@return金额*/funmoneyAdd(valueStr : String ,addStr : String,funm : DecimalFormat): String{
valvalue = BigDecimal(formatMoney(valueStr))
valaugend = BigDecimal(formatMoney(addStr))
returnfunm.format(value.add(augend))
}
/*** 金额相减*@method*@date: 2020/5/21 19:24*@author: moran*@paramvalueStr基础值*@paramminusStr被减数**@return金额*/funmoneySub(valueStr : String, minusStr : String): String{
valvalue = BigDecimal(formatMoney(valueStr))
valminuValue = BigDecimal(formatMoney(minusStr))
returnfunm.format(value.subtract(minuValue))
}
/*** 金额相减*@method*@date: 2020/5/21 19:24*@author: moran*@paramvalueStr基础值*@paramminusStr被减数*@paramfunm金额格式化类*@return金额*/funmoneySub(valueStr : String, minusStr : String,funm : DecimalFormat): String{
valvalue = BigDecimal(formatMoney(valueStr))
valminuValue = BigDecimal(formatMoney(minusStr))
returnfunm.format(value.subtract(minuValue))}
/*** 金额相乘*@method*@date: 2020/5/21 19:27*@author: moran*@paramvalueStr基础值*@parammulStr被乘数**@return金额*/funmoneyMul(valueStr : String, mulStr : String): String{
valvalue = BigDecimal(formatMoney(valueStr))
valmulValue = BigDecimal(formatMoney(mulStr))
returnfunm.format(value.multiply(mulValue))
}
/*** 金额相乘*@method*@date: 2020/5/21 19:27*@author: moran*@paramvalueStr基础值*@parammulStr被乘数*@paramfunm金额格式化类**@return金额*/funmoneyMul(valueStr : String, mulStr : String,funm : DecimalFormat): String{
valvalue = BigDecimal(formatMoney(valueStr))
valmulValue = BigDecimal(formatMoney(mulStr))
returnfunm.format(value.multiply(mulValue))
}
/*** 金额相除*@method*@date: 2020/5/21 19:29*@author: moran*@paramvalueStr除数*@paramdivideStr被除数*@paramscale小数点位数 默认为2*@paramroundingMode舍入模式:* 1.ROUND_CEILING 向正无穷方向舍入* 2.ROUND_DOWN 向零方向舍入* 3.ROUND_FLOOR 向负无穷方向舍入* 4.ROUND_HALF_DOWN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5* 5.ROUND_HALF_EVEN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN* 6.ROUND_HALF_UP 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6* 7.ROUND_UNNECESSARY 计算结果是精确的,不需要舍入模式* 8.ROUND_UP 向远离0的方向舍入**@return金额*/funmoneyDiv(valueStr : String, divideStr : String,scale : Int = 2,roundingMode : Int = BigDecimal.ROUND_HALF_UP): String{valvalue = BigDecimal(formatMoney(valueStr))valdivideValue = BigDecimal(formatMoney(divideStr))returnfunm.format(value.divide(divideValue,scale, roundingMode))}
/*** 金额相除*@method*@date: 2020/5/21 19:29*@author: moran*@paramvalueStr除数*@paramdivideStr被除数*@paramscale小数点位数 默认为2*@paramroundingMode舍入模式:* 1.ROUND_CEILING 向正无穷方向舍入* 2.ROUND_DOWN 向零方向舍入* 3.ROUND_FLOOR 向负无穷方向舍入* 4.ROUND_HALF_DOWN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5* 5.ROUND_HALF_EVEN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN* 6.ROUND_HALF_UP 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6* 7.ROUND_UNNECESSARY 计算结果是精确的,不需要舍入模式* 8.ROUND_UP 向远离0的方向舍入*@paramfunmDecimalFormat 金额格式化**@return金额*/
funmoneyDiv(valueStr : String, divideStr : String,scale : Int = 2,roundingMode : Int = BigDecimal.ROUND_HALF_UP,funm : DecimalFormat): String{valvalue = BigDecimal(formatMoney(valueStr))valdivideValue = BigDecimal(formatMoney(divideStr))returnfunm.format(value.divide(divideValue,scale, roundingMode))}
/*** 去除非数字内容,如:0.12元,0,01,1,11*@date: 2020/5/21 19:16*@author: moran*@paramvalue格式化金额类*@return*/funformatMoney(value: String?): String{
if(null== value || "".equals(value)){
return"0.00"}valmoney = pattern.matcher(value).replaceAll("").trim()if("".equals(money)){return"0.00"}returnmoney
}
/*** 格式化金额,*@method*@date: 2020/5/21 19:48*@author: moran*@paramvalue金额内容*@parampattern金额格式化形式*@return金额*/fundecimalFormatMoney(value: String?,pattern : String = "0.00"): String{
valformat = DecimalFormat(pattern)
returnformat.format(BigDecimal(formatMoney(value)))}
/*** 创建金额格式化对象*@method*@date: 2020/5/21 19:50*@author: moran*@param*@return*/private funcreateDecimalFormat(pattern : String = "0.00"): DecimalFormat{
valfunm = DecimalFormat(pattern)
returnfunm
}}