大數 如果基本的整數和浮點數精度不能夠滿足需求,那麼可以使用java.math包中兩個很有用的類:BigInteger和BigDecimal。這兩個類可以處理包含任意長度數字序列的數值。BigInteger類實現任意精度的整數運算,BigDecimal實現任意精度的浮點數運算。 使用靜態的value ...
大數
如果基本的整數和浮點數精度不能夠滿足需求,那麼可以使用java.math
包中兩個很有用的類:BigInteger
和BigDecimal
。這兩個類可以處理包含任意長度數字序列的數值。BigInteger
類實現任意精度的整數運算,BigDecimal
實現任意精度的浮點數運算。
使用靜態的valueof
方法可以將普通的數值轉換為大數:
BigInteger a = BigInteger.valueOf(100);
對於更大的數,可以使用一個帶字元串參數的構造器:
BigInteger reallyBig = new BigInteger("134443493494321591498614658741974141641519614974168416516114914196419");
另外還有一些常量:BigInteger.ZERO
、BigInteger.ONE
和BigInteger.TEN
註意:我們不能使用算術運算符(如:+和*)處理大數,而需要使用大叔類中的add
和multiply
方法。
BigInteger c = a.add(b); //c = a + b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); //d = c * (b + 2)
案例
假設你被邀請參加抽獎活動,並從500個可能的數值中抽取60個,下麵程式會告訴你中彩的概率是多少
import java.math.BigInteger;
import java.util.Scanner;
/**
* @author JKC
* @Description:
* @date 2022/6/29 09:42
*/
public class SixSample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("你需抽多少次?");
int k = in.nextInt();
System.out.println("你能抽的最高數是什麼?");
int n = in.nextInt();
BigInteger lotteryOdds = BigInteger.valueOf(1);
for (int i = 1; i <= k; i++) {
lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n - i + 1).divide(BigInteger.valueOf(i)));
}
System.out.printf("你的概率在%d分之一", lotteryOdds);
}
}
java.math.BigInteger API
BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other)
返回這個大整數和另一個大整數other的和,差,積,商以及餘數
BigInteger sqrt()
得到這個BigInteger的平方根
int compareTo(BigInteger other)
如果這個大整數與另一個大整數other相等,返回0;如果這個大整數小於另一個大整數other,返回負數;否則,返回正數
static BigInteger ValueOf(long x)
返回值等於x的大整數
java.math.BigDecimal API
BigDecimal add(BigDecimal other)
BigDecimal subtract(BigDecimal other)
BigDecimal multiply(BigDecimal other)
BigDecimal divide(BigDecimal other)
BigDecimal divide(BigDecimal other, RoundingMode mode)
返回這個大實數與other的和,差,積。如果商是個無限迴圈小數,第一個divide方法會拋出一個異常。要得到一個舍入的結果,就要使用第二個方法。
RoundingMode.HALF_UP是指四捨五入方式。
int compareTo(BigDecimal other)
如果這個大實數與other相等,返回0;如果這個大實數小於other,返回附屬;否則返回正數
static BigDecimal ValueOf(long x)
static BigDecimal ValueOf(long x, int n)
返回值等於x或x/10ⁿ的一個大實數