【JAVA零基礎入門系列】Day9 Java中的那個大數值

  【JAVA零基礎入門系列】(已完結)導航目錄html

  什麼是大數值?用腳趾頭想也知道,固然是「大」的數值(233)。Java中有兩個用於表示大數值的類,BigInteger和BigDecimal,那到底能表示多大的數值呢?理論上,能夠表示任意長度,任意精度,想要多大,就能有多大。java

  爲何要用大數值?理由很簡單,當整數跟浮點數的精度不能知足要求時,就須要用更大或者精度更高的類型,這時候大數值就應運而生了。程序員

  short的取值範圍爲-32768~32767,佔用2個字節(-2的15次方到2的15次方-1)。數組

  int的取值範圍爲(-2147483648~2147483647),佔用4個字節(-2的31次方到2的31次方-1) ide

  long的取值範圍爲(-9223372036854774808~9223372036854774807),佔用8個字節(-2的63次方到2的63次方-1)post

  float的取值範圍爲3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,一樣,e-45表示乘以10的負45次方)佔用4個字節 spa

  double的取值範圍爲1.797693e+308~ 4.9000000e-324 佔用8個字節 code

   無論是整數型仍是浮點型,它們的表示範圍和精度都是有限的,因此有時候沒法知足要求或者要求高精度計算時,就須要用到大數值了。先來看一個栗子。htm

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

  你猜,結果是什麼?對象

  

  驚不驚喜?意不意外?你也許會以爲,WTF?!!不是0.9嗎?可事實上,因爲浮點數的存儲及運算規則上的規定,就出現了上圖結果。事實上,浮點型沒法精確的表示1.1的小數部分。那究竟是爲何呢?

  此處省略一萬字。。。

  這樣的不精確,在須要嚴格結果的狀況時是不容許出現的,這時,咱們就須要用到大數值了。改寫後以下:

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);
    }
}

  如今就能獲得咱們想要的結果了。

  大數值運算跟普通運算不同,因爲Java裏的大數值沒有重載運算符操做,也沒有賦予程序員這樣的權力,因此只能經過調用方法的方式進行計算。

      +——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();取餘數

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

  比較——compareTo();大於則返回正數,小於則返回負數,等於返回0.

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

  靜態方法valueOf()用於將整數浮點數轉化成大數值對象。

  大數值的內容其實並很少,以後多加練習便能熟練掌握。

  至此,本篇內容結束,歡迎繼續關注!

相關文章
相關標籤/搜索