如果基本的整數(shù)和浮點數(shù)精度不能夠滿足需求,那么可以使用 java.math 包中的兩個很有用的類:BigInteger 和 BigDecimal。這兩個類可以處理包含任意長度數(shù)字序列的數(shù)值。BigInteger類實現(xiàn)了任意精度的整數(shù)運算,BigDecimal實現(xiàn)了任意精度的浮點數(shù)運算。
使用靜態(tài)的 valueOf 方法可以將普通的數(shù)值轉(zhuǎn)換為大數(shù)值:
BigInteger a = BigInteger.valueOf(100);
BigInteger 常用API
-
BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other)
返回這個大整數(shù)與另一個大整數(shù)other的和、差、積、商以及余數(shù)。
int compareTo(BigInteger other)
如果這個大整數(shù)與另一個大整數(shù)other相等,返回 0 ;如果這個大整數(shù)小于另一個大整數(shù)other,返回負數(shù);否則,返回正數(shù)。static BigInteger valueOf(long x)
返回值等于x的大整數(shù)。
BigDecimal常用API
-
BigDecimal add(BigDecimal other)
BigDecimal subtract(BigDecimal other)
BigDecimal multiply(BigDecimal other)
BigDecimal divide(BigDecimal other, RoundingMode mode) 5.0
返回這個大實數(shù)與另一個大實數(shù)other的和、差、積、商。要想計算商,必須給出舍入方式(rounding mode)。RoundingMode.HALF_UP 是我們?nèi)粘I钪械乃纳嵛迦敕绞?。(即,?shù)值 0 到 4 舍去,數(shù)值 5 到 9 進位)。
int compareTo(BigDecimal other)
如果這個大實數(shù)與另一個大實數(shù)相等,返回 0 ;如果這個大實數(shù)小于另一個大實數(shù),則返回負數(shù);否則,返回正數(shù)。static BigDecimal valueOf(long x)
返回值為 x 的一個大實數(shù)。
舍入方式枚舉常量
| 常量 | 描述 |
|---|---|
| ROUND_CEILING | 向正無限大方向舍入的舍入模式。 |
| ROUND_DOWN | 向零方向舍入的舍入模式。 |
| ROUND_FLOOR | 向負無限大方向舍入的舍入模式。 |
| ROUND_HALF_DOWN | 向最接近數(shù)字方向舍入的舍入模式,如果與兩個相鄰數(shù)字的距離相等,則向下舍入。 |
| ROUND_HALF_EVEN | 向最接近數(shù)字方向舍入的舍入模式,如果與兩個相鄰數(shù)字的距離相等,則向相鄰的偶數(shù)舍入。 |
| ROUND_HALF_UP | 向最接近數(shù)字方向舍入的舍入模式,如果與兩個相鄰數(shù)字的距離相等,則向上舍入。 |
| ROUND_UNNECESSARY | 用于斷言請求的操作具有精確結(jié)果的舍入模式,因此不需要舍入。(默認模式) |
| ROUND_UP | 遠離零方向舍入的舍入模式。 |