金额计算工具类

开发中常用工具类,总结记录一番!

提要:

        1、toEngineeringString:有必要时使用工程计数法。工程记数法是一种工程计算中经常使用的记录数字的方法,与科学技术法类似,但要求10的幂必须是3的倍数

         2、toPlainString:不使用任何指数

         3、toString:有必要时使用科学计数法

import java.math.BigDecimal;

public class DigitUtil {

	/**
	 * 金额计算,加法
	 * 
	 * @param obj1
	 * @param obj2
	 * @return
	 */
	public static String add(Object obj1, Object obj2) {
		BigDecimal big1 = new BigDecimal(obj1.toString());
		BigDecimal big2 = new BigDecimal(obj2.toString());
		return big1.add(big2).toPlainString();
	}

	/**
	 * 金额计算,除法
	 * 
	 * @param obj1
	 * @param obj2
	 * @return
	 */
	public static String sub(Object obj1, Object obj2) {
		BigDecimal big1 = new BigDecimal(obj1.toString());
		BigDecimal big2 = new BigDecimal(obj2.toString());
		return big1.subtract(big2).toPlainString();
	}

	/**
	 * 金额计算,乘法,保留所有小数位
	 * 
	 * @param obj1
	 * @param obj2
	 * @return
	 */
	public static String multiply(Object obj1, Object obj2) {
		BigDecimal big1 = new BigDecimal(obj1.toString());
		BigDecimal big2 = new BigDecimal(obj2.toString());
		return big1.multiply(big2).toPlainString();
	}

	/**
	 * 金额计算,乘法,四舍五入保留指定小数位
	 * 
	 * @param obj1
	 * @param obj2
	 * @param digit
	 *            指定保留位数
	 * @return
	 */
	public static String multiply(Object obj1, Object obj2, int digit) {
		BigDecimal big1 = new BigDecimal(obj1.toString());
		BigDecimal big2 = new BigDecimal(obj2.toString());
		BigDecimal big3 = big1.multiply(big2).setScale(digit,
				BigDecimal.ROUND_HALF_UP);

		return big3.toPlainString();
	}

	/**
	 * 金额计算,除法,四舍五入保留指定小数位
	 * 
	 * @param obj1
	 * @param obj2
	 * @param digit
	 *            指定保留位数
	 * @return
	 */
	public static String devide(Object obj1, Object obj2, int digit) {
		BigDecimal big1 = new BigDecimal(obj1.toString());
		BigDecimal big2 = new BigDecimal(obj2.toString());
		BigDecimal big3 = big1.divide(big2, digit, BigDecimal.ROUND_HALF_UP);
		return big3.toPlainString();
	}

	/**
	 * 金额四舍五入,保留两位小数
	 * 
	 * @param obj
	 * @return
	 */
	public static String scale(Object obj) {
		return scale(obj, 2);
	}

	/**
	 * 金额四舍五入,保留指定位小数
	 * 
	 * @param obj
	 * @param digit
	 * @return
	 */
	public static String scale(Object obj, int digit) {
		BigDecimal big = new BigDecimal(obj.toString());
		return big.setScale(digit, BigDecimal.ROUND_HALF_UP).toPlainString();
	}

	/**
	 * 金额比较
	 * 
	 * obj1 > obj2 return 1 obj1 < obj2 return -1 obj1 = obj2 return 0d
	 * 
	 * @param obj1
	 * @param obj2
	 * @return
	 */
	public static int compareTo(Object obj1, Object obj2) {
		BigDecimal big1 = new BigDecimal(obj1.toString());
		BigDecimal big2 = new BigDecimal(obj2.toString());
		return big1.compareTo(big2);
	}

	/**
	 * test
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		String str1 = "100";
		String str2 = "200";
		String str3 = "200";
		String str4 = "2.34564";
		//加
		System.out.println(DigitUtil.add(str1, str2));
		//减
		System.out.println(DigitUtil.sub(str1, str2));
		//乘,保留全部小数位
		System.out.println(DigitUtil.multiply(str1, str2));
		//乘,保留两位小数
		System.out.println(DigitUtil.multiply(str1, str2, 2));
		//除
		System.out.println(DigitUtil.devide(str1, str2, 2));
		//比较大小
		System.out.println(DigitUtil.compareTo(str2, str1));
		System.out.println(DigitUtil.compareTo(str1, str2));
		System.out.println(DigitUtil.compareTo(str2, str3));
		//四舍五入
		System.out.println(DigitUtil.scale(str4));
		System.out.println(DigitUtil.scale(str4, 3));
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值