一、BigInteger 类
1、概述
1、Integer类作为int的包装类,能存储的最大整型值为231-1, Long类也是有限的,最大为263-1。 如果要表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。
2、java.math包的BigInteger可以表示不可变的任意精度的整数。 BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。
另外, BigInteger 还提供以下运算:模算术、 GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
2、构造器
BigInteger(String val): 根据字符串构建BigInteger对象
3、常用方法
public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。
BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数相除只保留整数部分。
BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。
4、案例
1 @Test
2 public void test1(){
3 // long num1 = 12345678901234567890L;//out of range 超过long的范围
4 BigInteger num1 = new BigInteger("12345678901234567890");
5 BigInteger num2 = new BigInteger("92345678901234567890");
6
7 // System.out.println("和:" + (num1 + num2));//错误的
8 System.out.println("和:" + num1.add(num2));
9 System.out.println("减:" + num1.subtract(num2));
10 System.out.println("乘:" + num1.multiply(num2));
11 System.out.println("除:" + num2.divide(num1));//两个整数相除只保留整数部分
12 System.out.println("幂次方:" + num2.pow(5));
13 }
二、BidDecimal 类
1、概述
一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。
BigDecimal类支持不可变的、任意精度的有符号十进制定点数;
2、构造器
public BigDecimal(double val)
public BigDecimal(String val)
3、常用方法
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
BigDecimal add(BigDecimal augend) :返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。
BigDecimal subtract(BigDecimal subtrahend) :返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。
BigDecimal multiply(BigDecimal multiplicand):返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。
BigDecimal pow(int n) :返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度。
BigDecimal divide(BigDecimal divisor): 返回一个 BigDecimal,其值为 (this / divisor),其首选标度为 (this.scale() - divisor.scale());如果无法表示准确的商值(因为它有无穷的十进制扩展),则抛出 ArithmeticException。
BigDecimal divide(BigDecimal divisor, int roundingMode) :返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()。
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) :返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。
Demo:
1 @Test
2 public void testBigInteger() {
3 BigInteger bi = new BigInteger("12433241123");
4 BigDecimal bd = new BigDecimal("12435.351");
5 BigDecimal bd2 = new BigDecimal("11");
6 System.out.println(bi);
7 // System.out.println(bd.divide(bd2));
8 System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP)); //四舍五入
9 System.out.println(bd.divide(bd2, 15, BigDecimal.ROUND_HALF_UP)); //四舍五入,保留15位小数
10 }
Demo2:
1 @Test
2 public void test2(){
3 BigDecimal num1 = new BigDecimal("-12.1234567890123456567899554544444332");
4 BigDecimal num2 = new BigDecimal("89.6734567890123456567899554544444333");
5 System.out.println("和:" + num1.add(num2));
6 System.out.println("减:" + num1.subtract(num2));
7 System.out.println("乘:" + num1.multiply(num2));
8 System.out.println("除:" + num2.divide(new BigDecimal("2")));//可以整除(除尽)就对,不能整除就报异常
9 System.out.println("除:" + num2.divide(num1,BigDecimal.ROUND_HALF_UP));
10 System.out.println("除:" + num2.divide(num1,BigDecimal.ROUND_DOWN));//往零的方向舍去
11 System.out.println("除:" + num2.divide(num1,BigDecimal.ROUND_FLOOR));//往小的方向舍去
12 System.out.println("除:" + num2.divide(num1,BigDecimal.ROUND_CEILING));//往大的方向舍去
13 }