importjava.math.BigDecimal;importjava.text.NumberFormat;/*** BigDecimal工具类
*@author尘世间迷茫的小书童
**/
public classBigDecimalUtils {//默认除法运算精度
private static final int DEF_DIV_SCALE = 2;//建立货币格式化引用
private static final NumberFormat currency =NumberFormat.getCurrencyInstance();//建立百分比格式化引用
private static final NumberFormat percent =NumberFormat.getPercentInstance();/*** 加法
*@paramnum
*@paramnum1
*@return
*/
public staticBigDecimal add(BigDecimal num, BigDecimal num1) {returnnum.add(num1);
}/*** 提供精确的加法运算(默认四舍五入,根据scale保留小数位数)
*@paramnum
*@paramnum1
*@paramscale
*@return
*/
public static BigDecimal add(BigDecimal num, BigDecimal num1, intscale) {returnnum.add(num1).setScale(scale, BigDecimal.ROUND_HALF_UP);
}/*** 提供精确的加法运算(默认四舍五入,根据scale保留小数位数)
*@paramadd
*@paramadd1
*@paramscale
*@return
*/
public static BigDecimal add(String add, String add1, intscale) {
BigDecimal num= newBigDecimal(add);
BigDecimal num1= newBigDecimal(add1);returnnum.add(num1).setScale(scale, BigDecimal.ROUND_HALF_UP);
}/*** 减法
*@paramnum
*@paramnum1
*@return
*/
public staticBigDecimal sub(BigDecimal num, BigDecimal num1) {returnnum.subtract(num1);
}/*** 提供精确的减法运算(默认四舍五入,根据scale保留小数位数)
*@paramnum
*@paramnum1
*@paramscale
*@return
*/
public static BigDecimal sub(BigDecimal num, BigDecimal num1, intscale) {returnnum.subtract(num1).setScale(scale, BigDecimal.ROUND_HALF_UP);
}/*** 提供精确的减法运算(默认四舍五入,根据scale保留小数位数)
*@paramminus
*@paramminus1
*@return
*/
public static BigDecimal sub(String minus, String minus1, intscale) {
BigDecimal num= newBigDecimal(minus);
BigDecimal num1= newBigDecimal(minus1);returnsub(num, num1, scale);
}/*** 乘法
*@paramnum
*@paramnum1
*@return
*/
public staticBigDecimal multiply(BigDecimal num, BigDecimal num1) {returnnum.multiply(num1);
}/*** 提供精确的乘法运算(默认四舍五入,保留小数位数根据scale决定)
*@paramnum
*@paramnum1
*@paramscale
*@return
*/
public static BigDecimal multiply(String num, String num1, intscale) {
BigDecimal mul= newBigDecimal(num);
BigDecimal mul1= newBigDecimal(num1);returnmultiply(mul, mul1, scale);
}/*** 提供精确的乘法运算(默认四舍五入,保留小数位数根据scale确定)
*@paramnum
*@paramnum1
*@paramscale
*@return
*/
public static BigDecimal multiply(BigDecimal num, BigDecimal num1, intscale) {returnnum.multiply(num1).setScale(scale, BigDecimal.ROUND_HALF_UP);
}/*** 除法(除法除不尽会抛异常)
*@paramnum
*@paramnum1
*@return
*/
public staticBigDecimal divide(BigDecimal num, BigDecimal num1) {returnnum.divide(num1, DEF_DIV_SCALE);
}/*** 提供精确的除法运算(默认四舍五入保留两位小数)
*@paramdividend
*@paramdivisor
*@return
*/
public static BigDecimal divide(BigDecimal dividend, BigDecimal divisor, intscale) {returndividend.divide(divisor, scale, BigDecimal.ROUND_HALF_UP);
}/*** 提供精确的除法运算(默认四舍五入,保留小数位数根据scale决定)
*@paramdividend
*@paramdivisor
*@paramscale
*@return
*/
public static BigDecimal divide(String dividend, String divisor, intscale) {
BigDecimal num= newBigDecimal(dividend);
BigDecimal num1= newBigDecimal(divisor);returndivide(num, num1, scale);
}/*** 提供精确的取余数运算(小数保留位数根据scale决定)
*@paramdividend
*@paramdivisor
*@paramscale
*@return
*/
public static BigDecimal balance(BigDecimal dividend, BigDecimal divisor, intscale) {returndividend.remainder(divisor).setScale(scale);
}/*** 提供精确的取余数运算(默认保留两位小数)
*@paramdividend
*@paramdivisor
*@paramscale
*@return
*/
public staticBigDecimal balance(BigDecimal dividend, BigDecimal divisor) {returndividend.remainder(divisor).setScale(DEF_DIV_SCALE);
}/*** 比较BigDecimal,相等返回0,num>num1返回1,num
*@paramnum
*@paramnum1
*@return
*/
public static intcompareTo(BigDecimal num, BigDecimal num1) {returnnum.compareTo(num1);
}/*** BigDecimal货币格式化
*@parammoney
*@return
*/
public staticString currencyFormat(BigDecimal money) {returncurrency.format(money);
}/*** BigDecimal百分比格式化
*@paramrate
*@return
*/
public staticString rateFormat(BigDecimal rate) {returnpercent.format(rate);
}public static voidmain(String[] args) {
BigDecimal divide= divide("12", "11", 2);
System.out.println(divide.doubleValue());
BigDecimal num1= new BigDecimal("121");
BigDecimal num2= new BigDecimal("122");
System.out.println(compareTo(num1, num2));
String currencyFormat=currencyFormat(num2);
System.out.println(currencyFormat);
String rateFormat=rateFormat(num2);
System.out.println(rateFormat);
}
}