Nemo

Nemo 关注TA

路漫漫其修远兮,吾将上下而求索。

Nemo

Nemo

关注TA

路漫漫其修远兮,吾将上下而求索。

  •  普罗旺斯
  • 负责帅就完事了
  • 写了1,495,102字

该文章投稿至Nemo社区   Java  板块 复制链接


BigDecimal操作工具

发布于 2017/04/27 11:21 1,429浏览 0回复 4,215


import java.math.BigDecimal;

/**
* 金额转换 处理
*
* @author: Nemo
*/
public class BigDecimalUtils {

public final static BigDecimal PERCENTILE = new BigDecimal("0.01");// 百分比计算值

/**
* 可变长度的加法
*
* @param val1
* @param decimals
* @return
*/
public static BigDecimal add(BigDecimal val1, BigDecimal... decimals) {

if (isNull(val1)) {
val1 = new BigDecimal(0);
}
BigDecimal sum = val1;
for (BigDecimal decimal : decimals) {
if (isNull(decimal)) {
decimal = new BigDecimal(0);
}
sum = sum.add(decimal);
}

return sum;
}


/**
* 可变长度的减法
*
* @param val1
* @param decimals
* @return
*/
public static BigDecimal subtract(BigDecimal val1, BigDecimal... decimals) {

if (isNull(val1)) {
val1 = new BigDecimal(0);
}
BigDecimal subtract = val1;
for (BigDecimal decimal : decimals) {
if (isNull(decimal)) {
decimal = new BigDecimal(0);
}
subtract = subtract.subtract(decimal);
}
return subtract;
}

/**
* val1 / val2
*
* @param val1
* @param val2
* @param scale
* @param roundingMode
* @return
*/
public static BigDecimal divide(BigDecimal val1, BigDecimal val2, int scale, int roundingMode) {

if (isNull(val1) || isZero(val1) || isNull(val2) || isZero(val2)) {
return new BigDecimal(0);
}
return val1.divide(val2, scale, roundingMode);
}

/**
* 可变长度乘法
*
* @param val1
* @param decimals
* @return
*/
public static BigDecimal multiply(BigDecimal val1, BigDecimal... decimals) {

if (isNull(val1)) {
val1 = new BigDecimal(0);
}
BigDecimal result = val1;
for (BigDecimal decimal : decimals) {
if (isNull(decimal)) {
decimal = new BigDecimal(0);
}
result = result.multiply(decimal);
}
return result;
}

/**
* 百分比计算
*
* @param val
* @return
*/
public static BigDecimal percent(BigDecimal val) {
if (isNull(val)) {
return BigDecimal.ZERO;
}
return PERCENTILE.multiply(val);
}

/**
* 判断是否为null
*
* @param val
* @return
*/
public static boolean isNull(BigDecimal val) {
return null == val;
}

public static BigDecimal nullToZero(BigDecimal val) {

if (isNull(val)) {
return new BigDecimal(0);
}
return val;
}

/**
* 判断是否为0
*
* @param val
* @return
*/
public static boolean isZero(BigDecimal val) {
if (isNull(val)) {
return true;
}
return val.compareTo(new BigDecimal(0)) == 0;
}

/**
* 去掉多余的0,如0012.0500变成12.05,转换为字符串
*
* @param val
* @return
*/
public static String toString(BigDecimal val) {
return nullToZero(val).stripTrailingZeros().toPlainString();
}

/**
* 等值判断
*
* @param val1
* @param val2
* @return
*/
public static int compareTo(BigDecimal val1, BigDecimal val2) {
return nullToZero(val1).compareTo(nullToZero(val2));
}

/**
* 小于0
*
* @param val
* @return
*/
public static boolean lessThanZero(BigDecimal val) {
return compareTo(val, BigDecimal.ZERO) < 0;
}

/**
* 小于等于0
*
* @param val
* @return
*/
public static boolean lessEqZero(BigDecimal val) {
return compareTo(val, BigDecimal.ZERO) <= 0;
}

/**
* 大于0
*
* @param val
* @return
*/
public static boolean greaterThanZero(BigDecimal val) {
return compareTo(val, BigDecimal.ZERO) > 0;
}

/**
* 大于等于0
*
* @param val
* @return
*/
public static boolean greaterEqZero(BigDecimal val) {
return compareTo(val, BigDecimal.ZERO) >= 0;
}

/**
* 将负数返回为0
*
* @param val1
* @return
*/
public static BigDecimal minus2Zero(BigDecimal val1) {
if(BigDecimal.ZERO.compareTo(val1) > 0){
return BigDecimal.ZERO;
}

return val1;
}
}
点赞(0)

上一个文章:验证码生成工具

下一个文章:Base64转换工具

点了个评