4、大数字运算(BigInteger类和BigDecimal类)
在 Java 中提供了用于大數字運算的類,即 java.math.BigInteger 類和 java.math.BigDecimal 類。這兩個類用于高精度計算,其中 BigInteger 類是針對整型大數字的處理類,而 BigDecimal 類是針對大小數的處理類。
BigInteger 類
如果要存儲比 Integer 更大的數字,Integer 數據類型就無能為力了。因此,Java 中提供 BigInteger 類來處理更大的數字。
BigInteger 類型的數字范圍較 Integer 類型的數字范圍要大得多。BigInteger 支持任意精度的整數,也就是說在運算中 BigInteger 類型可以準確地表示任何大小的整數值。
除了基本的加、減、乘、除操作之外,BigInteger 類還封裝了很多操作,像求絕對值、相反數、最大公約數以及判斷是否為質數等。
要使用 BigInteger 類,首先要創建一個 BigInteger 對象。BigInteger 類提供了很多種構造方法,其中最直接的一種是參數以字符串形式代表要處理的數字。這個方法語法格式如下:
BigInteger(String val)這里的 val 是數字十進制的字符串。例如,要將數字 5 轉換為 BigInteger 對象,語句如下:
BigInteger bi = new BigInteger("5")注意:這里數字 5 的雙引號是必需的,因為 BigInteger 類構造方法要求參數是字符串類型。
創建 BigInteger 對象之后,便可以調用 BigInteger 類提供的方法進行各種數學運算操作,表 1 列出了 BigInteger 類的常用運算方法。
| add(BigInteger val) | 做加法運算 |
| subtract(BigInteger val) | 做減法運算 |
| multiply(BigInteger val) | 做乘法運算 |
| divide(BigInteger val) | 做除法運算 |
| remainder(BigInteger val) | 做取余數運算 |
| divideAndRemainder(BigInteger val) | 做除法運算,返回數組的第一個值為商,第二個值為余數 |
| pow(int exponent) | 做參數的 exponent 次方運算 |
| negate() | 取相反數 |
| shiftLeft(int n) | 將數字左移 n 位,如果 n 為負數,則做右移操作 |
| shiftRight(int n) | 將數字右移 n 位,如果 n 為負數,則做左移操作 |
| and(BigInteger val) | 做與運算 |
| or(BigInteger val) | 做或運算 |
| compareTo(BigInteger val) | 做數字的比較運算 |
| equals(Object obj) | 當參數 obj 是 Biglnteger 類型的數字并且數值相等時返回 true, 其他返回 false |
| min(BigInteger val) | 返回較小的數值 |
| max(BigInteger val) | 返回較大的數值 |
例 1
編寫一個 Java 程序,將用戶輸入的數字作為 BigInteger 對象,然后調用該對象的各種方法實現加、減、乘、除和其他運算,并輸出結果。具體實現代碼如下:
上述代碼將用戶輸入的整型數字保存到 num 變量中,由于 BigInteger 類的構造方法只接收字符串類型的參數,所以使用“new BigInteger(num+"")”代碼來創建 BigInteger 對象。接下來的代碼演示了如何調用 BigInteger 類提供的運算方法,運行效果下所示。
請輸入一個整型數字: 125 加法操作結果:224 減法操作結果:100 乘法橾作結果:375 除法操作結果:62 取商操作結果:41 取余操作結果:2 取 2 次方操作結果:15625 取相反數操作結果:-125BigDecimal 類
BigInteger 和 BigDecimal 都能實現大數字的運算,不同的是 BigDecimal 加入了小數的概念。一般的 float 和 double 類型數據只能用來做科學計算或工程計算,但由于在商業計算中要求數字精度比較高,所以要用到 BigDecimal 類。BigDecimal 類支持任何精度的浮點數,可以用來精確計算貨幣值。
BigDecimal 常用的構造方法如下。
- BigDecimal(double val):實例化時將雙精度型轉換為 BigDecimal 類型。
- BigDecimal(String val):實例化時將字符串形式轉換為 BigDecimal 類型。
BigDecimal 類的方法可以用來做超大浮點數的運算,像加、減、乘和除等。在所有運算中,除法運算是最復雜的,因為在除不盡的情況下,末位小數的處理方式是需要考慮的。
下面列出了 BigDecimal 類用于實現加、減、乘和除運算的方法。
BigDecimal add(BigDecimal augend) // 加法操作 BigDecimal subtract(BigDecimal subtrahend) // 減法操作 BigDecimal multiply(BigDecimal multiplieand) // 乘法操作 BigDecimal divide(BigDecimal divisor,int scale,int roundingMode ) // 除法操作其中,divide() 方法的 3 個參數分別表示除數、商的小數點后的位數和近似值處理模式。
表 2 列出了 roundingMode 參數支持的處理模式。
| BigDecimal.ROUND_UP | 商的最后一位如果大于 0,則向前進位,正負數都如此 |
| BigDecimal.ROUND_DOWN | 商的最后一位無論是什么數字都省略 |
| BigDecimal.ROUND_CEILING | 商如果是正數,按照 ROUND_UP 模式處理;如果是負數,按照 ROUND_DOWN模式處理 |
| BigDecimal.ROUND_FLOOR | 與 ROUND_CELING 模式相反,商如果是正數,按照 ROUND_DOWN 模式處理;如果是負數,按照 ROUND_UP 模式處理 |
| BigDecimal.ROUND_HALF_ DOWN | 對商進行五舍六入操作。如果商最后一位小于等于 5,則做舍棄操作,否則對最后一位進行進位操作 |
| BigDecimal.ROUND_HALF_UP | 對商進行四舍五入操作。如果商最后一位小于 5,則做舍棄操作,否則對最后一位進行進位操作 |
| BigDecimal.ROUND_HALF_EVEN | 如果商的倒數第二位是奇數,則按照 ROUND_HALF_UP 處理;如果是偶數,則按照 ROUND_HALF_DOWN 處理 |
例 2
編寫一個 Java 程序,演示如何使用 BigDecimal 類提供的方法對數字執行運算,并輸出結果。具體實現代碼如下:
上述代碼將用戶輸入的數字保存到 num 變量中,然后調用“newBigDecimal(num)”方法來創建 BigDecimal 對象。接下來的代碼演示了如何調用 BigDecimal 類提供的運算方法,運行效果如下所示。
請輸入一個數字: 100 加法操作結果:199.15399999999999636202119290828704833984375 減法操作結果:125.157903999999998490011421381495893001556396484375 乘法操作結果:350.0 除法操作結果(保留 2 位小數):31.85 除法操作結果(保留 5 位小數):31.84714總結
以上是生活随笔為你收集整理的4、大数字运算(BigInteger类和BigDecimal类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3、数字格式化
- 下一篇: 5、时间日期的处理:Java Date类