大数(BigDecimal和BigInteger)

大数(BigDecimal和BigInteger)

之前说到了,浮点数由于计算机浮点表示方法会有精度丢失问题,那涉及到浮点数的情况时(如银行卡金额),该怎么样进行运算呢?

我们可以使用Java.math 包下的两个类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值,前者实现任意精度的整数运算,后者实现任意精度的浮点数运算。

使用静态valueof方法将普通数值转换为大数

BigInteger bigInteger = BigInteger.valueOf(100);

对于非常大的数,可以使用带字符串参数的构造方法

BigInteger bigInteger = new BigInteger("123154674816531354684651354135413535241");

由于数字类型的改变,之前的运算符无法满足大数的运算,所以要用这个两个类提供的add(),divide(),multiply(),subtract()分别对应+,/,*,-

例子,求在n个数字中抽取k个数字的概率

public class Demo2 {
   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("请输入你想抽取的k个数字");
       int k= scanner.nextInt();
       System.out.println("请输入最大的数字n");
       int n= scanner.nextInt();
       BigInteger chance =  BigInteger.valueOf(1);
       for (int i = 1; i <= k; i++) {
           chance = chance.multiply(BigInteger.valueOf(n-i+1)).divide(BigInteger.valueOf(i));
      }
       System.out.println("在"+n+"个数字中抽取"+k+"个数据的概率为1/"+chance+",祝你好运");
  }
}

 

大数(BigDecimal和BigInteger)

上一篇:防火墙命令


下一篇:noip17