日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java——BigInteger类和BigDecimal类

發布時間:2025/7/14 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java——BigInteger类和BigDecimal类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java——BigInteger類和BigDecimal類

摘要:本文主要學習了用于大數字運算的BigInteger類和BigDecimal類。

部分內容來自以下博客:

https://www.cnblogs.com/LeoBoy/p/6056394.html

https://www.cnblogs.com/linjiqin/p/3413894.html

使用BigInteger類

為什么要使用BigInteger類

在Java的整數類型里面,byte為8位,short為16位,int為32位,long為64位。正因為這些數值的二進制位數已經固定,所以它們能表示的數值大小就有一定的范圍限制。因此,Java中提供BigInteger類來處理更大的數字。

構造方法

BigInteger(String val):創建一個具有參數所指定以字符串表示的數值的對象。

常用方法

BigInteger add(BigInteger val):加法運算。

BigInteger subtract(BigInteger val):減法運算。

BigInteger multiply(BigInteger val) :乘法運算。

BigInteger divide(BigInteger val) :除法運算,可能會產生除零異常。

public BigInteger[] divideAndRemainder(BigInteger val):獲取商值和余數組成的數組,初始元素是商值,最終元素是余數。

String toString():將BigInteger對象的數值轉換成字符串。

double doubleValue():將BigInteger對象中的值以雙精度數返回。

float floatValue():將BigInteger對象中的值以單精度數返回。

long longValue():將BigInteger對象中的值以長整數返回。

int intValue():將BigInteger對象中的值以整數返回。

使用代碼

代碼如下:

1 public void test() { 2 BigInteger a = new BigInteger("10"); 3 BigInteger b = new BigInteger("3"); 4 System.out.println("add >>> " + a.add(b)); 5 System.out.println("subtract >>> " + a.subtract(b)); 6 System.out.println("multiply >>> " + a.multiply(b)); 7 System.out.println("divide >>> " + a.divide(b)); 8 System.out.println("divideAndRemainder[0] >>> " + a.divideAndRemainder(b)[0]); 9 System.out.println("divideAndRemainder[1] >>> " + a.divideAndRemainder(b)[1]); 10 }

運行結果如下:

1 add >>> 13 2 subtract >>> 7 3 multiply >>> 30 4 divide >>> 3 5 divideAndRemainder[0] >>> 3 6 divideAndRemainder[1] >>> 1

使用BigDecimal類

為什么要使用BigDecimal類

雖然Java的基本類型提供了float和double類型,但他們在執行浮點運算的時候,只是提供了一個較為精確的結果,不能用于要求精確度很高的環境中。

因此,Java提供了BigDecimal類來保證結果的精確度。

BigDecimal都是不可變的(immutable)的,在進行每一步運算時,都會產生一個新的對象,所以在做運算時千萬要保存操作后的值。

使用BigDecimal的壞處是性能比double和float差,在處理龐大,復雜的運算時尤為明顯,因根據實際需求決定使用哪種類型。

使用float和double導致精度缺失

在使用基本類型的float和double的時候,可能會出現精度缺失的問題,代碼如下:

1 public void test() { 2 System.out.println(0.2 + 0.1); 3 System.out.println(0.3 - 0.1); 4 System.out.println(0.2 * 0.1); 5 System.out.println(0.3 / 0.1); 6 }

運行結果如下:

1 0.30000000000000004 2 0.19999999999999998 3 0.020000000000000004 4 2.9999999999999996

我們使用BigDecimal類來解決使用浮點類型導致精度缺失的問題。

構造方法

BigDecimal(int):創建一個具有參數所指定整數值的對象。

BigDecimal(double):創建一個具有參數所指定雙精度值的對象(不建議使用)。

BigDecimal(String):創建一個具有參數所指定以字符串表示的數值的對象。

不使用傳入double的構造方法

因為float和double會導致精度缺失的問題,所以不建議使用將double作為參數的構造方法,代碼如下:

1 public void test() { 2 BigDecimal a = new BigDecimal(2); 3 BigDecimal b = new BigDecimal(2.3); 4 BigDecimal c = new BigDecimal("2.3"); 5 System.out.println(a); 6 System.out.println(b); 7 System.out.println(c); 8 }

運行結果如下:

1 2 2 2.29999999999999982236431605997495353221893310546875 3 2.3

常用方法

BigDecimal add(BigDecimal augend):加法運算。

BigDecimal subtract(BigDecimal subtrahend):減法運算。

BigDecimal multiply(BigDecimal multiplicand):乘法運算。

BigDecimal divide(BigDecimal divisor):除法運算,可能會產生除零異常和不能整除異常。

BigDecimal?divide(BigDecimal divisor, int scale, int roundingMode):除法運算,可傳入精確小數位數scale,和舍入模式roundingMode。

BigDecimal[] divideAndRemainder(BigDecimal divisor):獲取商值和余數組成的數組,初始元素是商值,最終元素是余數。

BigDecimal setScale(int newScale, int roundingMode):進行舍入操作。

String toString():將BigDecimal對象的數值轉換成字符串。

double doubleValue():將BigDecimal對象中的值以雙精度數返回。

float floatValue():將BigDecimal對象中的值以單精度數返回。

int intValue():將BigDecimal對象中的值以整數返回。

舍入模式

ROUND_UP:向遠離零的方向舍入。舍棄非零部分,并將非零舍棄部分相鄰的一位數字加一。

ROUND_DOWN:向接近零的方向舍入。舍棄非零部分,同時不會非零舍棄部分相鄰的一位數字加一,采取截取行為。

ROUND_CEILING:向正無窮的方向舍入。如果為正數,舍入結果同ROUND_UP一致;如果為負數,舍入結果同ROUND_DOWN一致。

ROUND_FLOOR:向負無窮的方向舍入。如果為正數,舍入結果同ROUND_DOWN一致;如果為負數,舍入結果同ROUND_UP一致。

ROUND_HALF_UP:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則為向上舍入的舍入模式。這種模式也就是我們常說的我們的“四舍五入”。

ROUND_HALF_DOWN:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則為向下舍入的舍入模式。這種模式也就是我們常說的我們的“五舍六入”。

ROUND_HALF_EVEN:向“最接近”的數字舍入,如果與兩個相鄰數字的距離相等,則相鄰的偶數舍入。如果舍棄部分左邊的數字奇數,則舍入行為與ROUND_HALF_UP相同;如果為偶數,則舍入行為與ROUND_HALF_DOWN相同。四舍六入,五分兩種情況,如果前一位為奇數,則入位,否則舍去。

ROUND_UNNECESSARY:斷言請求的操作具有精確的結果,因此不需要舍入。如果對獲得精確結果的操作指定此舍入模式,則拋出ArithmeticException。

使用代碼

代碼如下:

1 public void test() { 2 BigDecimal a = new BigDecimal(10); 3 BigDecimal b = new BigDecimal(3); 4 System.out.println("add >>> " + a.add(b)); 5 System.out.println("subtract >>> " + a.subtract(b)); 6 System.out.println("multiply >>> " + a.multiply(b)); 7 // System.out.println("divide >>> " + a.divide(b));// Non-terminating decimal expansion; no exact representable decimal result. 8 System.out.println("divide >>> " + a.divide(b, 2, BigDecimal.ROUND_HALF_UP)); 9 System.out.println("divideAndRemainder[0] >>> " + a.divideAndRemainder(b)[0]); 10 System.out.println("divideAndRemainder[1] >>> " + a.divideAndRemainder(b)[1]); 11 }

運行結果如下:

1 add >>> 13 2 subtract >>> 7 3 multiply >>> 30 4 divide >>> 3.33 5 divideAndRemainder[0] >>> 3 6 divideAndRemainder[1] >>> 1

轉載于:https://www.cnblogs.com/shamao/p/10943539.html

總結

以上是生活随笔為你收集整理的Java——BigInteger类和BigDecimal类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。