Java bigdemical精確計算

很多同學在實際開始中都遇到過這樣的問題,就是在對商品價格進行計算的時候都出現了不精確的問題,下面我們就來看看;

  /**
     * a 乘以b
     * @param chengshu
     * @param beiChengShu
     * @return
     */
    public static String multiply(String chengshu, String beiChengShu) {
        BigDecimal bigDecimal = new BigDecimal(chengshu);
        BigDecimal bigDecimal2 = new BigDecimal(beiChengShu);
        BigDecimal multiply = bigDecimal.multiply(bigDecimal2);
        return multiply.toString();
    }

    /**
     * a 除以b
     * @param chushu
     * @param beiChuShu
     * @return
     */
    public static String divide(String chushu, String beiChuShu) {
        BigDecimal bigDecimal = new BigDecimal(chushu);
        BigDecimal bigDecimal2 = new BigDecimal(beiChuShu);
        BigDecimal multiply = bigDecimal.divide(bigDecimal2);
        return multiply.toString();
    }

    /**
     * a 加b
     * @param jiashu
     * @param beiJiaShu
     * @return
     */
    public static String add(String jiashu, String beiJiaShu) {
        BigDecimal bigDecimal = new BigDecimal(jiashu);
        BigDecimal bigDecimal2 = new BigDecimal(beiJiaShu);
        BigDecimal multiply = bigDecimal.add(bigDecimal2);
        return multiply.toString();
    }

    /**
     * a 減b
     * @param jianshu
     * @param beiJianShu
     * @return
     */
    public static String subtract(String jianshu, String beiJianShu) {
        BigDecimal bigDecimal = new BigDecimal(jianshu);
        BigDecimal bigDecimal2 = new BigDecimal(beiJianShu);
        BigDecimal multiply = bigDecimal.subtract(bigDecimal2);
        return multiply.toString();
    }

    /**
     * 保留2位小數,第三位四捨五入
     * @param
     * @return
     */
    public static String hasTwo(Object target) {
        DecimalFormat format = new DecimalFormat("#.00");
        return format.format(target);
    }

另外一種除法比較靈活:

bigDecimal.divide(new BigDecimal("1000"),3,BigDecimal.ROUND_HALF_DOWN)

BigDecimal bigDecimal = new BigDecimal("1.2022");
    System.err.println("ROUND_DOWN="+bigDecimal.setScale(1, BigDecimal.ROUND_DOWN));//只取小數點後一位,不管下一位
    System.err.println("ROUND_UP="+bigDecimal.setScale(1, BigDecimal.ROUND_UP));//只要有後面有數字就向上進以爲,0除過
    System.err.println("ROUND_HALF_UP="+bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP));//下一位大於等於0.5就會向上進一位,否則只取小數點後一位
    System.err.println("ROUND_HALF_DOWN="+bigDecimal.setScale(1, BigDecimal.ROUND_HALF_DOWN));//去小數點後1爲,除非下一位大於0.5纔會向上進一位
發佈了65 篇原創文章 · 獲贊 9 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章