java大数的使用

引言

如果基本的整数和浮点数精度不能够满足需求, 那么可以使用java.math 包中的两个很有用的类:Biglnteger 和 BigDecimaL 这两个类可以处理包含任意长度数字序列的数值。 Biglnteger类实现了任意精度的整数运算, BigDecimal 实现了任意精度的浮点数运算。

1. java.math.BigInteger

常用操作:
• Biglnteger add(Biglnteger other)
• Biglnteger subtract(Biglnteger other)
• Biglnteger multipiy(Biginteger other)
• Biglnteger divide(Biglnteger other)
• Biglnteger mod(Biglnteger other)
返冋这个大整数和另一个大整数 other的和、差、 积、 商以及余数。
• int compareTo(Biglnteger other) 如果这个大整数与另一个大整数 other 相等, 返回 0; 如果这个大整数小于另一个大整 数 other, 返回负数; 否则, 返回正数。
• static Biglnteger valueOf(long x) 返回值等于 x 的大整数。 (静态函数valueOf的参数只能是long类型的)

例1.1

	   Scanner in = new Scanner(System.in);
       BigInteger a = BigInteger.valueOf(1234567891);//参数为long类型
       BigInteger b = new BigInteger("1234567891011121314226587562147");//将任意长度的字符串转换为大整数
       BigInteger c = in.nextBigInteger();//键盘输入

        //四则简单运算
       c = a.add(b);
       c = a.subtract(b);
       c = a.multiply(b);
       c = a.divide(b);

       //判等和比较大小
       boolean d = a.equals(b);
       int e = a.compareTo(b);

       //常用的操作
       c = a.mod(b);
       c = a.gcd(b);
       c = a.max(b);
       c = a.min(b);
       c = a.pow(7);

       //计算长度
       int len = a.toString().length();

2.java.math.BigDecimal

常用操作:
• BigDecimal add(BigDecimal other)
• BigDecimal subtract(BigDecimal other)
• BigDecimal multipiy(BigDecimal other)
• BigDecimal divide(BigDecimal other RoundingMode mode)
返回这个大实数与另一个大实数 other 的和、 差、 积、 商。要想计算商, 必须给出舍入方式 (rounding mode)。RoundingMode.HALF_UP 是在学校中学习的四舍五入方式 (BP, 数值 0 到 4 舍去, 数值 5 到 9 进位) 。它适用于常规的计算。有关其他的舍入方 式请参看 API文档。
• int compareTo(BigDecimal other)
如果这个大实数与另一个大实数相等, 返回 0 ; 如果这个大实数小于另一个大实数, 返回负数; 否则,返回正数。
• static BigDecimal valueOf(long x)
• static BigDecimal valueOf(double x)
• static BigDecimal valueOf(long x,int scale)
返回值为 x 或 x / 10scale 的一个大实数。

具体的代码实现与例1.1类似,不赘述。但是在做除法的需要注意一下舍入方式。

3.补充

关于舍入方式可以参考一下:DecimalFormat对数值格式化的舍入问题——RoundingMode
  另外,关于本博文,可以参考一下:java大数详解 和 java 大数详细讲解

你可能感兴趣的:(java大数的使用)