【JAVA零基礎(chǔ)入門系列】Day9 Java中的那個(gè)大數(shù)值

?? 什么是大數(shù)值?用腳趾頭想也知道,當(dāng)然是“大”的數(shù)值(233)。Java中有兩個(gè)用于表示大數(shù)值的類,BigInteger和BigDecimal,那到底能表示多大的數(shù)值呢?理論上,可以表示任意長(zhǎng)度,任意精度,想要多大,就能有多大。

??為什么要用大數(shù)值?理由很簡(jiǎn)單,當(dāng)整數(shù)跟浮點(diǎn)數(shù)的精度不能滿足要求時(shí),就需要用更大或者精度更高的類型,這時(shí)候大數(shù)值就應(yīng)運(yùn)而生了。

??short的取值范圍為-32768~32767,占用2個(gè)字節(jié)(-2的15次方到2的15次方-1)。

??int的取值范圍為(-2147483648~2147483647),占用4個(gè)字節(jié)(-2的31次方到2的31次方-1)

??long的取值范圍為(-9223372036854774808~9223372036854774807),占用8個(gè)字節(jié)(-2的63次方到2的63次方-1)

??float的取值范圍為3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同樣,e-45表示乘以10的負(fù)45次方)占用4個(gè)字節(jié)

??double的取值范圍為1.797693e+308~ 4.9000000e-324 占用8個(gè)字節(jié)

??不管是整數(shù)型還是浮點(diǎn)型,它們的表示范圍和精度都是有限的,所以有時(shí)候無法滿足要求或者要求高精度計(jì)算時(shí),就需要用到大數(shù)值了。先來看一個(gè)栗子。

public class Test{ public static void main(String[] args) { double result = 2.0-1.1;
        System.out.println(result);
    }
}

??你猜,結(jié)果是什么?

image

??驚不驚喜?意不意外?你也許會(huì)覺得,WTF?!!不是0.9嗎?可事實(shí)上,由于浮點(diǎn)數(shù)的存儲(chǔ)及運(yùn)算規(guī)則上的規(guī)定,就出現(xiàn)了上圖結(jié)果。事實(shí)上,浮點(diǎn)型無法精確的表示1.1的小數(shù)部分。那到底是為什么呢?

??此處省略一萬字。。。

??這樣的不精確,在需要嚴(yán)格結(jié)果的情況時(shí)是不允許出現(xiàn)的,這時(shí),我們就需要用到大數(shù)值了。改寫后如下:

import java.math.BigDecimal; 
public class Test{ public static void main(String[] args) {
        BigDecimal result = BigDecimal.valueOf(2.0).subtract(BigDecimal.valueOf(1.1));
        System.out.println(result);
    }
}

??現(xiàn)在就能得到我們想要的結(jié)果了。

??大數(shù)值運(yùn)算跟普通運(yùn)算不一樣,由于Java里的大數(shù)值沒有重載運(yùn)算符操作,也沒有賦予程序員這樣的權(quán)力,所以只能通過調(diào)用方法的方式進(jìn)行計(jì)算。


      +——add();

      System.out.println(BigInteger.valueOf(10).add(BigInteger.valueOf(5)));

      - ——subtract();

      System.out.println(BigInteger.valueOf(10).subtract(BigInteger.valueOf(5)));

      *——multiply();

      System.out.println(BigInteger.valueOf(10).multiply(BigInteger.valueOf(5))); 

      /——divide();
      System.out.println(BigInteger.valueOf(10).divide(BigInteger.valueOf(5)));

  %——mod();取余數(shù)

  System.out.println(BigInteger.valueOf(10).mod(BigInteger.valueOf(5)));

  比較——compareTo();大于則返回正數(shù),小于則返回負(fù)數(shù),等于返回0.

  System.out.println(BigInteger.valueOf(10).compareTo(BigInteger.valueOf(5)))

  靜態(tài)方法valueOf()用于將整數(shù)浮點(diǎn)數(shù)轉(zhuǎn)化成大數(shù)值對(duì)象。

??大數(shù)值的內(nèi)容其實(shí)并不多,之后多加練習(xí)便能熟練掌握。

??至此,本篇內(nèi)容結(jié)束,歡迎繼續(xù)關(guān)注!

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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