一、大數字運算
在 Java 中提供了大數字的操作類,即 java.math.BigInteger 類與 java.math.BigDecimal 類。這兩個類用於高精度計算,體重 BigInteger 類是針對大整數的處理類,而 BigDecimal 類則是針對大小數的處理類。
BigInteger
BigInteger 類型的數字范圍較 Integer 類型的數字范圍要大得多。 Integer 是 int 的包裝類, int 的最大值是 2³¹-1 ,如果要計算更大的數字,使用 Integer 數據類型就無法實現了,所以 Java 中提供了 BigInteger 類來處理更大的數字。
BigInteger 支持任意精度的整數,也就是說在運算中 BigInteger 類型可以准確地表示任何大小的整數值而不會丟失任何信息。
在 BigInteger 類中封裝了多種操作,除了基本的加、減、乘、除操作之外,還提供了絕對值、相反數、最大公約數以及判斷是否為質數等操作。
使用 BigInteger 類,可以實例化一個 BigInteger 對象,並自動調用相應的構造函數。 BigInteger 類具有很多構造函數,但最直接的一種方式是參數以字符串形式代表要處理的數字。
語法如下 :
其中 , val 是十進制字符串。
如果將 2 轉換為 BigInteger 類型,可以使用一下語句進行初始化操作 :
參數 2 的雙引號不能省略,因為參數是以字符串的形式存在的。
一旦創建了對象實例,就可以調用 BigInteger 類中的一些方法進行運算操作,包括基本的數學運算和位運算以及一些取相反數、取絕對值等操作。下面列舉幾種常用運算方法 :
eg : 創建類,在類的主方法中創建 BigInteger 類的實例對象,調用該對象的各種方法實現大整數的加、減、乘、除和其他運算,並輸出運算結果。
BigDecimal
BigDecimal 和 BigInteger 都能用來實現大數字的運算,不同的是 BigDecimal 加入了小數的概念。一般的 float 型和 double 型數據只可以用來做科學計算或工程計算,但由於在商業計算中要求數字精度比較高,所以要用到 java.math.BigDecimal 類。
BigDecimal 類支持任何精度的定點數,可以用它來精確計算貨幣值。
在 BigDecimal 類中常用的兩個構造方法如下 :
public BigDecimal(double val) : 實例化時將雙精度型轉換為 BigDecimal 類型 public BigDecimal(String val) : 實例化時將字符串形式轉換為 BigDecimal 類型
BigDecimal 類型的數字可以用來做超大的浮點數的運算,如加、減、乘、除等,但是在所有的運算中除法是最復雜的,因為在除不盡的情況下末位小數點的處理是需要考慮的。
下面列舉 BigDecimal 類中實現加、減、乘、除的方法 :
在上述方法中,BigDecimal 類中 divide() 方法有多種設置,用於返回商末位小數點的處理,這些模式的名稱與含義如下 :
BigDecimal 類中 divide() 方法的多種處理模式
模式 含義
BigDecimal.ROUND_UP s商的最后一位如果大於 0 ,則向前進位,正負數都如此
BigDecimal .ROUND_DOWN 商的最后一位無論是什么數字都省略
BigDecimal .ROUND_CEILING
商如果是正數,按照 ROUND_UP 模式處理;
如果是負數,按照 ROUND_DOWN 模式處理。
這種模式的處理都會使近似值大於等於實際值。
BigDecimal .ROUND_FLOOR
與 ROUND_CEILING 模式相反,
商如果是正數,按照 ROUND_DOWN 模式處理;
如果是負數,按照ROUND_UP 模式處理。
這種模式的處理都會使近似值小於等於實際值。
BigDecimal .ROUND_HALF_DOWN
對商進行四舍五入操作,如果商最后一位小於等於 5,則做舍棄操作;
如果最后一位大於 5 ,則做進位操作,如 7.5 ≈ 7
BigDecimal .ROUND_HALF_UP
對商進行四舍五入操作,如果商的最后一位小於 5 則舍棄;
如果大於等於 5 ,進行進位操作,如 7.5 ≈ 8
BigDecimal ROUND_HALF_EVEN
如果商的倒數第二位為奇數,則按照 ROUND_HALF_UP 處理;
如果為偶數,則按照 ROUND_HALF_DOWN 處理,如 7.5 ≈ 8 , 8.5 ≈ 8
eg : 創建類,在類中分別定義 add() 、sub() 、mul() 和 div() 方法實現加、減、乘、除運算,並輸出運算結果。
運行結果為:
原文:https://blog.csdn.net/js940814/article/details/80210456