Java中的大数字运算

在Java中提供了大数字的操作类,即java.math.BigInteger和java.math.BigDecimal类。这两个类用于高精度计算,其中BigInteger类针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。

 

一、BigInteger

BigInteger类型的数字范围较Integer类型的数字范围要大得多,BigInteger支持任意精度的整数,也就是说在运算中BigInteger类型可以准确地表示任何大小的整数值而不会丢失任何信息,语法如下:

public BigInteger(String val)

下面将列举几种BigInteger类中的常用运算方法:

1、public BigInteger add(BigInteger val):做加法运算

2、public BigInteger subtract(BigInteger val):做减法运算

3、public BigInteger multiply(BigInteger val):做乘法运算

4、public BigInteger divide(BigInteger val):做除法运算

5、public BigInteger remainder(BigInteger val):做取余运算

6、public BigInteger[] divideAndRemainder(BigInteger val):用数组返回余数和商,数组中第一个为商

7、public BigInteger pow(int exponent):进行取参数的exponent次方操作

8、public BigInteger negate():取相反数

9、public BigInteger shiftLeft(int n):将数字左移n位,如果n为负数,做右移操作

10、public BigInteger shiftRight(int n):将数字右移n位,如果n为负数,做左移操作

11、public BigInteger and(BigInteger val):做与操作

12、public BigInteger or(BigInteger val):做或操作

13、public int compareTo(BigInteger val):做数字比较操作

14、public boolean equals(Object x):当参数x是BigInteger类型的数字并且数值相等时,返回true

15、public BigInteger min(BigInteger val):返回较小的值

16、public BigInteger max(BigInteger val):返回较大的值

通过以下示例对部分上述方法进行说明:

import java.math.BigInteger;

public class BigIntegerDemo {
	public static void main(String args[]) {
		//实例化一个大数字
		BigInteger bigInstance = new BigInteger("8");
		System.out.println("该大数字为:"+bigInstance);
		//取该大数字加2的操作
		System.out.println("加2操作结果为:"+bigInstance.add(new BigInteger("2")));
		//取该大数字减2的操作
		System.out.println("减2操作结果为:"+bigInstance.subtract(new BigInteger("2")));
		//取该大数字乘2的操作
		System.out.println("乘2操作结果为:"+bigInstance.multiply(new BigInteger("2")));
		//取该大数字除以2的操作
		System.out.println("除以2操作结果为:"+bigInstance.divide(new BigInteger("2")));
		//取该大数字除以3的商
		System.out.println("除以3的商:"+bigInstance.divideAndRemainder(new BigInteger("3"))[0]);
		//取该大数字除以3的余数
		System.out.println("除以3的余数:"+bigInstance.divideAndRemainder(new BigInteger("3"))[1]);
		//取该大数字的2次方
		System.out.println("该大数字的2次方结果为:"+bigInstance.pow(2));
		//取该大数字的相反数
		System.out.println("该大数字的相反数为:"+bigInstance.negate());
	}
}
/*输出结果为:
该大数字为:8
加2操作结果为:10
减2操作结果为:6
乘2操作结果为:16
除以2操作结果为:4
除以3的商:2
除以3的余数:2
该大数字的2次方结果为:64
该大数字的相反数为:-8
*/

二、BigDecimal

在BigDecimal类中常用的两个构造方法如下:

1、public BigDecimal(double val):实例化时将双精度型转换为BigDecimal类型

2、public BigDecimal(String val):实例化时字符串类型转换成BigDecimal类型

下面例举BigDecimal类中实现加、减、乘、除的方法:

1、public BigDecimal add(BigDecimal augend):做加法操作

2、public BigDecimal subtract(BigDecimal subtrahend):做减法操作

3、public BigDecimal multiply(BigDecimal multiplicand):做乘法操作

4、public BigDecimal divide(BigDecimal divisor,int scale,inr roundingMode):做除法操作,三个参数分别是除数、商的小数点后的位数、近似处理模式

在上述方法中,divide()方法有多种设置,如下:

BigDecimal类中divide()方法的多种处理模式
模式 含义
BigDecimal.ROUND_UP 商的最后一位如果大于0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN 商的最后一位无论是什么数字都省略
BigDecimal.ROUND_CEILING 商如果是正数,按照ROUND_UP模式处理;如果是负数,按照ROUND_DOWN模式 处理。这种模式处理都会使近似值大于等于实际值
BigDecimal.ROUND_FLOOR 商如果是负数,按照ROUND_UP模式处理;如果是正数,按照ROUND_DOWN模式 处理。这种模式处理都会使近似值小于等于实际值
BigDecimal.ROUND_HALF_DOWN 对商进行四舍五入操作,如果最后一位小于等于5,则做舍弃操作
BigDecimal.ROUND_HALF_UO 对商进行四舍五入操作,如果最后一位小于5,则做舍弃操作
BigDecimal.ROUND_HALF_EVEN 如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理;如果为偶数,则按照ROUND_HALF_DOWN处理

通过下面的示例对上述的方法进行说明:

import java.math.BigDecimal;

public class BigDecimalDemo {
	static final int location = 10;
	/*
	 * 定义加法方法,参数为加数与被加数
	 * 
	 * @param value1:被加数
	 * @param value2:加数
	 * @return:运算结果
	 * */
	public BigDecimal add(double value1,double value2) {
		//实例化Decimal对象
		BigDecimal b1 = new BigDecimal(Double.toString(value1));
		BigDecimal b2 = new BigDecimal(Double.toString(value2));
		//调用加法方法
		return b1.add(b2);
	}
	
	/*
	 * 定义减法方法,参数为减数与被减数
	 * 
	 * @param value1:被减数
	 * @param value2:减数
	 * @return:运算结果
	 * */
	public BigDecimal sub(double value1,double value2) {
		//实例化Decimal对象
		BigDecimal b1 = new BigDecimal(Double.toString(value1));
		BigDecimal b2 = new BigDecimal(Double.toString(value2));
		//调用减法方法
		return b1.subtract(b2);
	}
	
	/*
	 * 定义乘法方法,参数为乘数与被乘数
	 * 
	 * @param value1:第一个乘数
	 * @param value2:第二个乘数
	 * @return:运算结果
	 * */
	public BigDecimal mul(double value1,double value2) {
		//实例化Decimal对象
		BigDecimal b1 = new BigDecimal(Double.toString(value1));
		BigDecimal b2 = new BigDecimal(Double.toString(value2));
		//调用乘法方法
		return b1.multiply(b2);
	}
	
	/*
	 * 定义除法方法,参数为除数与被除数
	 * 
	 * @param value1:被除数
	 * @param value2:除数
	 * @return:运算结果
	 * */
	public BigDecimal div(double value1,double value2) {
		//调用自定义除法方法
		return div(value1,value2,location);
	}
	
	//定义除法方法,参数分别是除数与被除数以及商小数点后的位数
	public BigDecimal div(double value1,double value2,int b) {
		if(b<0) {
			System.out.println("b值必须大于等于0!");
		}
		BigDecimal b1 = new BigDecimal(Double.toString(value1));
		BigDecimal b2 = new BigDecimal(Double.toString(value2));
		//调用除法方法,商小数点后保留b位,并将结果进行四舍五入操作
		return b1.divide(b2,b,BigDecimal.ROUND_HALF_UP);
	}
	
	public static void main(String args[]) {
		BigDecimalDemo b =new BigDecimalDemo();
		System.out.println("-7.5+8.9结果:"+b.add(-7.5, 8.9));
		System.out.println("-7.5-8.9结果:"+b.sub(-7.5, 8.9));
		System.out.println("-7.5x8.9结果:"+b.mul(-7.5, 8.9));
		System.out.println("23÷2,结果保留小数后10位:"+b.div(23, 2));
		System.out.println("-7.5÷8.9,结果保留小数后5位:"+b.div(-7.5, 8.9,5));
	}
	
}
/*输出结果如下:
-7.5+8.9结果:1.4
-7.5-8.9结果:-16.4
-7.5x8.9结果:-66.75
23÷2,结果保留小数后10位:11.5000000000
-7.5÷8.9,结果保留小数后5位:-0.84270
*/
发布了61 篇原创文章 · 获赞 1 · 访问量 1351

猜你喜欢

转载自blog.csdn.net/qq_29440983/article/details/103480673