java中小數處理,bigDecimal類應用


1、構造一個BigDecimal對象:

//創建一個BigDecimal對象,初始化必須使用字符串,因為用數值初始化會得到近似值,不准確
BigDecimal bigDecimalOne = new BigDecimal("1.232324");

//將浮點數裝換成BigDecimal對象
double d = 1.3422424;
BigDecimal bigDecimalTwo =BigDecimal.valueOf(d);

 

2、BigDecimal成員方法:

//bigDecimalOne加上bigDecimalTwo,然后返回一個新對象
bigDecimalOne.add(bigDecimalTwo);

//bigDecimalOne減去bigDecimalTwo,然后返回一個新對象
bigDecimalOne.subtract(bigDecimalTwo);

//bigDecimalOne乘以bigDecimalTwo,然后返回一個新對象
bigDecimalOne.multiply(bigDecimalTwo);

//bigDecimalOne除以bigDecimalTwo,然后返回一個新對象
bigDecimalOne.divide(bigDecimalTwo);

 

3、BigDecimal對象轉化成基本數據類型:

//BigDecimal對象的數值轉換成對應的字符串
bigDecimalOne.toString();

//BigDecimal對返回double值
bigDecimalOne.doubleValue();

//BigDecimal對返回float
bigDecimalOne.floatValue();

//BigDecimal對返回long值
bigDecimalOne.longValue();

//BigDecimal對返回int值
bigDecimalOne.intValue();

 

4、BigDecimal比較大小:

BigDecimal value1 = new BigDecimal("0.8");

BigDecimal value2 = new BigDecimal("2");

if (value1.compareTo(value2) == 1) {
    System.out.println("value1大於value2");
}

if (value1.compareTo(value2) == 0) {
    System.out.println("value1等於value2");
}

if (value1.compareTo(value2) == -1) {
    System.out.println("value1小於value2");
}

Boolean flag = value1.compareTo(BigDecimal.ZERO) == 1 && value1.compareTo(BigDecimal.ONE) == -1;

if (flag) {
    System.out.println("value1大於0小於1");
}

 

5、BigDecimal工具類:

import java.math.BigDecimal;

public class BigDecimalUtil {

    private static final int DEF_DIV_SCALE = 10;

    private BigDecimalUtil(){}

    /**
     * 精准的加法運算
     * @param v1
     * @param v2
     * @return
     */
    public static double add(double v1,double v2){
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.add(b2).doubleValue();
    }

    /**
     * 精確減法計算
     * @param v1
     * @param v2
     * @return
     */
    public static double sub(double v1,double v2){
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 精確乘法計算
     * @param v1
     * @param v2
     * @return
     */
    public static double mul(double v1,double v2){
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.multiply(b2).doubleValue();
    }

    /**
     * 精確除法計算
     * @param v1
     * @param v2
     * @return
     */
    public static double div(double v1,double v2){
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();
    }


    public static void main(String[] args) {
        double d1 = 12.897;
        double d2 = 3.87;
        System.out.println(BigDecimalUtil.add(d1,d2));
        System.out.println(BigDecimalUtil.sub(d1, d2));
        System.out.println(BigDecimalUtil.mul(d1, d2));
        System.out.println(BigDecimalUtil.div(d1, d2));
    }
    
}

 

6、java中舍入方式:

     第一種方法:

//保留兩位小數
double db = bigDecimalTwo.setScale(2, RoundingMode.HALF_UP).doubleValue();
System.out.println(db);

 

    第二種方法:

//保留兩位小數
DecimalFormat df = new DecimalFormat("#.00");
df.format(bigDecimalTwo);

 

7、參考:

https://www.fangzhipeng.com/java/2019/09/01/use-bigdemecial.html

 


免責聲明!

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



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