如果基本的整數和浮點數精度不能夠滿足需求,那麼可以使用 java.math 包中的兩個很有用的類:BigInteger 和 BigDecimal。這兩個類可以處理包含任意長度數字序列的數值。BigInteger類實作了任意精度的整數運算,BigDecimal實作了任意精度的浮點數運算。
使用靜态的 valueOf 方法可以将普通的數值轉換為大數值:
BigInteger 常用API
-
BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other)
傳回這個大整數與另一個大整數other的和、差、積、商以及餘數。
-
int compareTo(BigInteger other)
如果這個大整數與另一個大整數other相等,傳回 0 ;如果這個大整數小于另一個大整數other,傳回負數;否則,傳回正數。
-
static BigInteger valueOf(long x)
傳回值等于x的大整數。
BigDecimal常用API
-
BigDecimal add(BigDecimal other)
BigDecimal subtract(BigDecimal other)
BigDecimal multiply(BigDecimal other)
BigDecimal divide(BigDecimal other, RoundingMode mode) 5.0
傳回這個大實數與另一個大實數other的和、差、積、商。要想計算商,必須給出舍入方式(rounding mode)。RoundingMode.HALF_UP 是我們日常生活中的四舍五入方式。(即,數值 0 到 4 舍去,數值 5 到 9 進位)。
-
int compareTo(BigDecimal other)
如果這個大實數與另一個大實數相等,傳回 0 ;如果這個大實數小于另一個大實數,則傳回負數;否則,傳回正數。
-
static BigDecimal valueOf(long x)
傳回值為 x 的一個大實數。
舍入方式枚舉常量
常量 | 描述 |
---|---|
ROUND_CEILING | 向正無限大方向舍入的舍入模式。 |
ROUND_DOWN | 向零方向舍入的舍入模式。 |
ROUND_FLOOR | 向負無限大方向舍入的舍入模式。 |
ROUND_HALF_DOWN | 向最接近數字方向舍入的舍入模式,如果與兩個相鄰數字的距離相等,則向下舍入。 |
ROUND_HALF_EVEN | 向最接近數字方向舍入的舍入模式,如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入。 |
ROUND_HALF_UP | 向最接近數字方向舍入的舍入模式,如果與兩個相鄰數字的距離相等,則向上舍入。 |
ROUND_UNNECESSARY | 用于斷言請求的操作具有精确結果的舍入模式,是以不需要舍入。(預設模式) |
ROUND_UP | 遠離零方向舍入的舍入模式。 |