[自學(xué)java]BigInteger & BigDecimal

BigInteger

Java用來(lái)處理超過(guò)long型范圍的數(shù)的封裝類。

構(gòu)造方法

BigInteger b1 = new BigInteger(String val);
BigInteger b1 = new BigInteger(String val , int radix);

常用方法

加減乘除運(yùn)算需要借助方法:

b1.add(b2);
b1.subtract(b2);
b1.multiply(b2);
b1.divide(b2);

返回BigInteger對(duì)象

        BigInteger b1 = new BigInteger("12345678901234567890123");
        BigInteger b2 = new BigInteger("1234567890");

        System.out.println(b1.add(b2));
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b1.divide(b2));
OUT:
12345678901235802458013
12345678901233333322233
15241578751714678875170903950470
10000000001000

其他方法:
remainder(); 取余
pow();乘方a.pow(b)=a^b
gcd();最大公約數(shù)
abs(); 絕對(duì)值
negate(); 取反數(shù)

BigDecimal

Java用來(lái)精確處理浮點(diǎn)數(shù)的封裝類。
因?yàn)楦↑c(diǎn)數(shù)計(jì)算不精確,例如:

    public static void main(String[] args) {
        System.out.println(0.05+0.01);
    }
out:
0.060000000000000005

double 類型(默認(rèn))計(jì)算會(huì)發(fā)生精度缺失。

構(gòu)造器

推薦使用:(可以保存精度)
BigDecimal(String val)
注:
如果一定要使用double類型的數(shù)據(jù)作為傳遞參數(shù),請(qǐng)這樣:
BigDecimal.valueOf(double val)
因?yàn)椋?code>BigDecimal(double val) 參數(shù)會(huì)丟失精度。

常用方法

精確浮點(diǎn)數(shù)運(yùn)算,類似BigInteger:

        BigDecimal b1 = new BigDecimal("0.05");
        BigDecimal b2 = new BigDecimal("0.01");

        System.out.println(b1.add(b2));
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b2.divide(b1));

        System.out.println(b1.compareTo(b2));
        System.out.println(b1.max(b2));
out:
0.06
0.04
0.0005
0.2
1
0.05

注意:除法涉及到保留位數(shù),否則出現(xiàn)除不盡的異常。
因?yàn)檎{(diào)用繁瑣, 需要將每個(gè)double轉(zhuǎn)化為BigDecimal,可以做成一個(gè)工具類,包含加減乘除。

private static final int DIV_SCALE = 9;//保留位數(shù)

    public static double div(double b1 , double b2){
        BigDecimal bd1 = BigDecimal.valueOf(b1);
        BigDecimal bd2 = BigDecimal.valueOf(b2);
        //設(shè)置除不盡四舍五入
        return bd1.divide(bd2,DIV_SCALE,RoundingMode.HALF_UP).doubleValue();
    }

    public static void main(String[] args) {
        System.out.println(div(0.045 ,0.007));
    }

out:
6.428571429
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容