java BigDecimal 计算相关


	private static final String PATTERN = "0.00";
	private static final String PATTERN_WITHOUT_SCALE = "0";
	private static final DecimalFormat FORMAT_WITHOUT_SCALE = new DecimalFormat(PATTERN_WITHOUT_SCALE);
	private static final DecimalFormat FORMAT = new DecimalFormat(PATTERN);
	static {
		FORMAT.setRoundingMode(RoundingMode.HALF_UP);
		FORMAT_WITHOUT_SCALE.setRoundingMode(RoundingMode.HALF_UP);
	}

	/**
	 * 小数点后位数
	 */
	private static final int SCALE = 2;

	/**
	 * <p>转换double类型数据到BigDecimal类型.</p>
	 * 
	 * @param value Double类型的数据
	 * @return BigDecimal类型数据
	 */
	public static BigDecimal format(final double value) {
		return (new BigDecimal(FORMAT.format(value)));
	}

	/**
	 * <p>转换long类型数据到BigDecimal类型.</p>
	 * 
	 * @param value Double类型的数据
	 * @return BigDecimal类型数据
	 */
	public static BigDecimal format(final long value) {
		return (new BigDecimal(FORMAT.format(value)));
	}

	public static BigDecimal formatWithoutScale(final BigDecimal value) {
		return (new BigDecimal(FORMAT_WITHOUT_SCALE.format(value)));
	}

	/**
	 * <p>格式化BigDecimal类型的数值.</p>
	 * 
	 * @param value BigDecimal类型的数据
	 * @return BigDecimal类型数据
	 */
	public static BigDecimal format(final BigDecimal value) {
		return value.setScale(SCALE, BigDecimal.ROUND_HALF_UP);
	}

	/**
	 * <p>BigDecimal加法运算.</p>
	 * 
	 * @param d1 加数
	 * @param d2 加数
	 * @return BigDecimal类型
	 */
	public static BigDecimal add(final BigDecimal d1, final BigDecimal d2) {
		return format(d1.add(d2));
	}

	/**
	 * <p>多个BigDecimal类型的数据相加.</p>
	 * 
	 * @param v1
	 * @param vs
	 * @return
	 */
	public static BigDecimal add(final BigDecimal v1, final BigDecimal... vs) {
		BigDecimal sum = BigDecimal.ZERO;
		for (final BigDecimal v : vs) {
			sum = add(sum, v);
		}
		return add(v1, sum);
	}
	
	/**
	 * <p>多个BigDecimal类型的数据相加.保留固定位数小数</p>
	 * 
	 * @param num
	 * @param vs
	 * @return
	 */
	public static BigDecimal add(final int num, final BigDecimal... vs) {
		BigDecimal sum = BigDecimal.ZERO;
		for (final BigDecimal v : vs) {
			sum = sum.add(v);
		}
		return format(sum,num);
	}

	/**
	 * <p>多个BigDecimal类型的数据连减.</p>
	 * 
	 * @param v1
	 * @param vs
	 * @return
	 */
	public static BigDecimal subtract(final BigDecimal v1, final BigDecimal... vs) {
		final BigDecimal sum = add(BigDecimal.ZERO, vs);
		return subtract(v1, sum);
	}

	/**
	 * <p>BigDecimal减法运算.</p>
	 * 
	 * @param d1 运算数
	 * @param d2 运算数
	 * @return BigDecimal类型
	 */
	public static BigDecimal subtract(final BigDecimal d1, final BigDecimal d2) {
		return format(d1.subtract(d2));
	}

	private static int compareBigDecimal(final BigDecimal v1, final BigDecimal v2) {
		return (format(v1).compareTo(format(v2)));
	}

	/**
	 * 
	 * <p>大于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean gt(final BigDecimal v1, final BigDecimal v2) {
		return compareBigDecimal(v1, v2) > 0;
	}

	/**
	 * <p>大于等于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean ge(final BigDecimal v1, final BigDecimal v2) {
		return compareBigDecimal(v1, v2) >= 0;
	}

	/**
	 * <p>等于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean eq(final BigDecimal v1, final BigDecimal v2) {
		return compareBigDecimal(v1, v2) == 0;
	}

	/**
	 * <p>小于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean lt(final BigDecimal v1, final BigDecimal v2) {
		return compareBigDecimal(v1, v2) < 0;
	}

	/**
	 * <p>小于等于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean le(final BigDecimal v1, final BigDecimal v2) {
		return compareBigDecimal(v1, v2) <= 0;
	}

	/**
	 * <p>不等于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean ne(final BigDecimal v1, final BigDecimal v2) {
		return compareBigDecimal(v1, v2) != 0;
	}

	/**
	 * <p>除法操作.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static BigDecimal divide(final BigDecimal v1, final BigDecimal v2) {
		return v1.divide(v2, SCALE,BigDecimal.ROUND_HALF_UP);
		//return format(v1.divide(v2));
	}

	/** 乘法操作 */
	public static BigDecimal multiply(final BigDecimal v1, final BigDecimal v2) {
		return format(v1.multiply(v2));
	}
        /**
	 * <p>多个BigDecimal类型的数据相乘.</p>
	 * 
	 * @param v1
	 * @param vs
	 * @return
	 */
	public static BigDecimal multiply(final BigDecimal v1, final BigDecimal... vs) {
		BigDecimal sum = v1;
		for (final BigDecimal v : vs) {
			sum = sum.multiply(v);
		}
		return sum.setScale(SCALE, BigDecimal.ROUND_HALF_UP);
	}
	/*=========新增带位数的格式化================*/
	public static BigDecimal format(BigDecimal value,int num){
		return value.setScale(num, BigDecimal.ROUND_HALF_UP);
	}

    /**
	 * <p>BigDecimal加法运算.</p>
	 * 
	 * @param d1 加数
	 * @param d2 加数
	 * @return BigDecimal类型
	 */
	public static BigDecimal add(final BigDecimal d1, final BigDecimal d2,final int num) {
		return format(d1.add(d2),num);
	}
	/**
	 * <p>BigDecimal减法运算.</p>
	 * 
	 * @param d1 运算数
	 * @param d2 运算数
	 * @return BigDecimal类型
	 */
	public static BigDecimal subtract(final BigDecimal d1, final BigDecimal d2,final int num) {
		return format(d1.subtract(d2),num);
	}

	private static int compareBigDecimal(final BigDecimal v1, final BigDecimal v2,final int num) {
		return (format(v1,num).compareTo(format(v2,num)));
	}
	
	/** 乘法操作 */
	public static BigDecimal multiply(final BigDecimal v1, final BigDecimal v2,final int num) {
		return format(v1.multiply(v2),num);
	}
    /**
	 * <p>多个BigDecimal类型的数据相乘.保留固定位数小数</p>
	 * 
	 * @param v1
	 * @param vs
	 * @return
	 */
	public static BigDecimal multiply(final int num, final BigDecimal v1,final BigDecimal... vs) {
		BigDecimal sum = v1;
		for (final BigDecimal v : vs) {
			sum = sum.multiply(v);
		}
		return sum.setScale(num, BigDecimal.ROUND_HALF_UP);
	}
	/**
	 * <p>除法操作.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static BigDecimal divide(final BigDecimal v1, final BigDecimal v2,final int num) {
		return v1.divide(v2, num,BigDecimal.ROUND_HALF_UP);
	}
	//比较相关
	/**
	 * 
	 * <p>大于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean gt(final BigDecimal v1, final BigDecimal v2,final int num) {
		return compareBigDecimal(v1, v2,num) > 0;
	}
	/**
	 * <p>大于等于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean ge(final BigDecimal v1, final BigDecimal v2,final int num) {
		return compareBigDecimal(v1, v2,num) >= 0;
	}

	/**
	 * <p>等于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean eq(final BigDecimal v1, final BigDecimal v2,final int num) {
		return compareBigDecimal(v1, v2,num) == 0;
	}

	/**
	 * <p>小于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean lt(final BigDecimal v1, final BigDecimal v2,final int num) {
		return compareBigDecimal(v1, v2,num) < 0;
	}

	/**
	 * <p>小于等于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean le(final BigDecimal v1, final BigDecimal v2,final int num) {
		return compareBigDecimal(v1, v2,num) <= 0;
	}

	/**
	 * <p>不等于.</p>
	 * 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static boolean ne(final BigDecimal v1, final BigDecimal v2,final int num) {
		return compareBigDecimal(v1, v2,num) != 0;
	}
	/**
	 * <p>null处理</p>
	 * 
	 * @param v
	 * @return
	 */
	public static BigDecimal formatNullToZero(BigDecimal v){
		return v==null?BigDecimal.ZERO:v;
	}

	/**
	 * <p>null处理</p>
	 * 
	 * @param v
	 * @return
	 */
	public static BigDecimal formatNullToZero(String v){
		v = StringFilter.getStringValue(v);
		return "".equalsIgnoreCase(v)?BigDecimal.ZERO:new BigDecimal(v);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值