[Java] 表示無限大小整數的BigInteger和無限精度的BigDecimal
阿新 • • 發佈:2019-01-04
int
, long
,double
的表數範圍都有限。BigInteger
可以表示任意大小整數,BigDecimal
對數字的精度沒有限制。
BigInteger
和BigDecimal
的例項只能用new BigInteger(String)
和 new BigDecimal(String)
建立。
對應各種運算的方法: add
, subtract
, multiply
, divide
, remainder
compareTo
。
對於BigDecimal
,如果divide
方法的結果不能終止,將丟擲異常ArithmeticException
,解決辦法就是呼叫過載方法 divide(BigDecimal d, int scale, int roundingMode)
scale
為小數點後位數。
BigDecimal a = new BigDecimal(1.0);
BigDecimal b = new BigDecimal(3);
BigDecimal c = a.divide(b, 20, BigDecimal.ROUND_UP);
System.out.println(c);
輸出:
0.33333333333333333334.
計算階乘的例子,一般不能使用int
,否則很快就會超出表數範圍:
import java.math.*; public class LargeFactorial { public static void main(String[] args) { System.out.println("50! is \n" + factorial(50)); } public static BigInteger factorial(long n) { BigInteger result = BigInteger.ONE; for (int i = 1; i <= n; i++) result = result.multiply(new BigInteger(i + "")); return result; } }
BigInteger.ONE
對應 new BigInteger("1")
. i + ""
是數值轉換為String
的好辦法。
BigInteger
和BigDecimal
都在java.math
包裡,使用時使用語句:
import java.math.*;
Introduction to Java Programming 10.9