Java BigDecimal工具類


import java.math.BigDecimal;
import java.text.NumberFormat;

/**
 * BigDecimal工具類
 * @author 塵世間迷茫的小書童
 *
 */
public class BigDecimalUtils {
    
    //默認除法運算精度
    private static final int DEF_DIV_SCALE = 2;
    
    //建立貨幣格式化引用 
    private static final NumberFormat currency = NumberFormat.getCurrencyInstance();
    
    //建立百分比格式化引用 
    private static final NumberFormat percent = NumberFormat.getPercentInstance();
    
    /**
     * 加法
     * @param num
     * @param num1
     * @return
     */
    public static BigDecimal add(BigDecimal num, BigDecimal num1) {
        return num.add(num1);
    }
    
    
    /**
     * 提供精確的加法運算(默認四舍五入,根據scale保留小數位數)
     * @param num
     * @param num1
     * @param scale
     * @return
     */
    public static BigDecimal add(BigDecimal num, BigDecimal num1, int scale) {
        return num.add(num1).setScale(scale, BigDecimal.ROUND_HALF_UP);
    }
    
    
    /**
     * 提供精確的加法運算(默認四舍五入,根據scale保留小數位數)
     * @param add
     * @param add1
     * @param scale
     * @return
     */
    public static BigDecimal add(String add, String add1, int scale) {
        BigDecimal num = new BigDecimal(add);
        BigDecimal num1 = new BigDecimal(add1);
        return num.add(num1).setScale(scale, BigDecimal.ROUND_HALF_UP);
    }
    
    
    /**
     * 減法
     * @param num
     * @param num1
     * @return
     */
    public static BigDecimal sub(BigDecimal num, BigDecimal num1) {
        return num.subtract(num1);
    }
    
    
    /**
     * 提供精確的減法運算(默認四舍五入,根據scale保留小數位數)
     * @param num
     * @param num1
     * @param scale
     * @return
     */
    public static BigDecimal sub(BigDecimal num, BigDecimal num1, int scale) {
        return num.subtract(num1).setScale(scale, BigDecimal.ROUND_HALF_UP);
    }
    
    
    /**
     * 提供精確的減法運算(默認四舍五入,根據scale保留小數位數)
     * @param minus
     * @param minus1
     * @return
     */
    public static BigDecimal sub(String minus, String minus1, int scale) {
        BigDecimal num = new BigDecimal(minus);
        BigDecimal num1 = new BigDecimal(minus1);
        return sub(num, num1, scale);
    }
    
    
    /**
     * 乘法
     * @param num
     * @param num1
     * @return
     */
    public static BigDecimal multiply(BigDecimal num, BigDecimal num1) {
        return num.multiply(num1);
    }
    
    
    /**
     * 提供精確的乘法運算(默認四舍五入,保留小數位數根據scale決定)
     * @param num
     * @param num1
     * @param scale
     * @return
     */
    public static BigDecimal multiply(String num, String num1, int scale) {
        BigDecimal mul = new BigDecimal(num);
        BigDecimal mul1 = new BigDecimal(num1);
        return multiply(mul, mul1, scale);
    }
    
    
    /**
     * 提供精確的乘法運算(默認四舍五入,保留小數位數根據scale確定)
     * @param num
     * @param num1
     * @param scale
     * @return
     */
    public static BigDecimal multiply(BigDecimal num, BigDecimal num1, int scale) {
        return num.multiply(num1).setScale(scale, BigDecimal.ROUND_HALF_UP);
    }
    
    
    /**
     * 除法(除法除不盡會拋異常)
     * @param num
     * @param num1
     * @return
     */
    public static BigDecimal divide(BigDecimal num, BigDecimal num1) {
        return num.divide(num1, DEF_DIV_SCALE);
    }
    
    
    /**
     * 提供精確的除法運算(默認四舍五入保留兩位小數)
     * @param dividend
     * @param divisor
     * @return
     */
    public static BigDecimal divide(BigDecimal dividend, BigDecimal divisor, int scale) {
        return dividend.divide(divisor, scale, BigDecimal.ROUND_HALF_UP);
    }
    
    
    /**
     * 提供精確的除法運算(默認四舍五入,保留小數位數根據scale決定)
     * @param dividend
     * @param divisor
     * @param scale
     * @return
     */
    public static BigDecimal divide(String dividend, String divisor, int scale) {
        BigDecimal num = new BigDecimal(dividend);
        BigDecimal num1 = new BigDecimal(divisor);
        return divide(num, num1, scale);
    }
    
    
    /**
     * 提供精確的取余數運算(小數保留位數根據scale決定)
     * @param dividend
     * @param divisor
     * @param scale
     * @return
     */
    public static BigDecimal balance(BigDecimal dividend, BigDecimal divisor, int scale) {
        return dividend.remainder(divisor).setScale(scale);
    }
    
    
    /**
     * 提供精確的取余數運算(默認保留兩位小數)
     * @param dividend
     * @param divisor
     * @param scale
     * @return
     */
    public static BigDecimal balance(BigDecimal dividend, BigDecimal divisor) {
        return dividend.remainder(divisor).setScale(DEF_DIV_SCALE);
    }
    
    
    /**
     * 比較BigDecimal,相等返回0,num>num1返回1,num<num1返回-1
     * @param num
     * @param num1
     * @return
     */
    public static int compareTo(BigDecimal num, BigDecimal num1) {
        return num.compareTo(num1);
    }
    
    
    /**
     * BigDecimal貨幣格式化
     * @param money
     * @return
     */
    public static String currencyFormat(BigDecimal money) {
        return currency.format(money);
    }
    
    
    /**
     * BigDecimal百分比格式化
     * @param rate
     * @return
     */
    public static String rateFormat(BigDecimal rate) {
        return percent.format(rate); 
    }
    
    
    public static void main(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);
    }
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM