Java中大数字运算

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

1.BigInteger

BigInteger支持任意精度的整数,也就是说在运算中BigInteger类型可以准确表示任何大小的整数值而不会丢失任何信息。

BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。

public BigInteger(String val);      //其中val是十进制字符串

几种常用运算方法:

                public BigInteger add(BigInteger val): 做加法运算
		public BigInteger subtract(BigInteger val): 做减法运算
		public BigInteger multiply(BigInteger val): 做乘法运算
		public BigInteger divide(BigInteger val): 做除法运算
		public BigInteger remainder(BigInteger val): 做取余运算
		public BigInteger[] divideAndRemainder(BigInteger val): 用数组返回余数和商,结果数组中第一个值为商,第二个值为余数
		public BigInteger pow(int exponent): 进行取参数的exponent次方操作
		public BigInteger negate():取相反数
		public BigInteger shiftLeft(int n):将数字左移n位,如果n为负数,做右移操作
		public BigInteger shiftRight(int n):将数字右移n位,如果n为负数,做左移操作
		public BigInteger and(BigInteger val):做与操作
		public BigInteger or(BigInteger val):做或操作
		public int compareTo(BigInteger val):做数字比较操作
		public boolean equals(Object x):当参数x是BigInteger类型的数字并且数值相等时,返回true
		public BigInteger min(BigInteger val):返回较小的数值
		public BigInteger max(BigInteger val):返回较大的数值

2.BigDecimal

BigDecimal类支持任何精度的定点数,可以用它来精确计算货币值。

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

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

public BigDecimal(String val):实例化时将字符串形式转换为BigDecimal类型。

public BigDecimal add(BigDecimal augend):做加法操作
public BigDecimal subtract(BigDecimal subtrahend):做减法操作
public BigDecimal multiply(BigDecimal multiplicand):做乘法操作
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):做除法操作,
		方法中3个参数分别代表除数、商的小数点后的位数、近似处理模式

    BigDecimal类中divide()方法的多种处理模式

                模式

                                                    含义

BigDecimal.ROUND_UP商的最后一位如果大于0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN商的最后一位无论是什么数字都省略
BigDecimal.ROUND_CEILING商如果是正数,按照ROUND_UP模式处理;如果是负数,按照ROUND_DOWN模式处理。这种模式的处理都会使近似值大于等于实际值
BigDecimal.ROUND_FLOOR与ROUND_CEILING模式相反,商如果是正数,按照ROUND_DOWN模式处理;商如果是负数,则按照ROUND_UP模式处理。这种模式的处理都会使近似值小于等于实际值
BigDecimal.ROUND_HALF_DOWN对商进行四舍五入操作,如果商最后一位小于等于5,则做舍弃操作;如果最后一位大于5,进行进位操作,如7.5=7

BigDecimal.ROUND_HALF_UP

对商进行四舍五入操作,如果商的最后一位小于5则舍弃;如果大于等于5,进行进位操作,如7.5=8
BigDecimal.ROUND_HALF_EVEN如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理;如果为偶数,则按照ROUND_HALF_DOWN处理,如7.5=8,8.5=8

 

 

 

 

 

 

 

 

 

 

 

package hello;

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) {
		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) {
		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("两个数字相加结果:" + b.add(-7.5, 8.9));
		System.out.println("两个数字相减结果:" + b.sub(-7.5, 8.9));
		System.out.println("两个数字相乘结果:" + b.mul(-7.5, 8.9));
		System.out.println("两个数字相除结果,结果小数后保留10位:"+b.div(10, 2));
		System.out.println("两个数字相除,保留小数后5位:"+b.div(-7.5,8.9, 5));
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值