java--大数操作

 

/**
 * 
 */
package edu.fjut.bignumber;

import java.math.BigInteger;

/**
 * 
 * 大数操作指的是操作的数字非常大,大到超过其数据类型的表示范围
 * 如:999999999999999999999999999*9999999999999999999999999
 * 所以此时就需要使用对象的形式进行操作,在以前若碰到此问题,实际
 * 上都是采用字符串的形式进行处理的(进行拆分、一位一位的计算)。
 *
 * 在Java中为了解决这样的难题,提供了两个大数据对象:
 * BigInteger(大整数)、BigDecimal(大浮点数)decimal为小数的意思
 */
public class BigNumberDemo {

	public static void main(String[] args) {
		
		String num1="9999999999999999999999";
		String num2="8888888888888888888888";
		
		BigInteger bg1=new BigInteger(num1);//实例化BigInteger对象
		BigInteger bg2=new BigInteger(num2);
		
		System.out.println("加法操作:"+bg1.add(bg2));
		System.out.println("减法操作:"+bg1.subtract(bg2));
		System.out.println("乘法操作:"+bg1.multiply(bg2));
		System.out.println("除法操作:"+bg1.divide(bg2));//只得到商值,无余数

		BigInteger []result=bg1.divideAndRemainder(bg2);//相除之后有余数
		System.out.println("相除之后的商值为"+result[0]);//第一个值为商值
		System.out.println("相除之后的余数为"+result[1]);//第二个值为余数
		
	}
   /*输出结果为:
	*  加法操作:18888888888888888888887
	*  减法操作:1111111111111111111111
	*  乘法操作:88888888888888888888871111111111111111111112
	*  除法操作:1
	*  相除之后的商值为1
	*  相除之后的余数为1111111111111111111111
    */
}

 

/**
 * 
 */
package edu.fjut.bignumber;

import java.math.BigDecimal;

/**
 * BigDecimal类的主要功能是进行小数的大数据计算,最重要的
 * 一点是,计算结果可以精确到指定的四舍五入位数.
 * 
 * 如果想要进行四舍五入操作,则必须依靠依靠以下方法:
 *  public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
 *  --scale表示四舍五入的位数
 *  --roundingMode表示四舍五入的操作模式,ROUND_HALF_UP......
 */

class MyMath{
	
	public static double add(String num1,String num2){
		BigDecimal bd1=new BigDecimal(num1);
		BigDecimal bd2=new BigDecimal(num2);
		return bd1.add(bd2).doubleValue();//拆箱
	}
	
	public static double sub(String num1,String num2){
		BigDecimal bd1=new BigDecimal(num1);
		BigDecimal bd2=new BigDecimal(num2);
		return bd1.subtract(bd2).doubleValue();
	}
	
	public static double mul(String num1,String num2){
		BigDecimal bd1=new BigDecimal(num1);
		BigDecimal bd2=new BigDecimal(num2);
		return bd1.multiply(bd2).doubleValue();//拆箱
	}
	
	public static double div(String num1,String num2,int scale){
		BigDecimal bd1=new BigDecimal(num1);
		BigDecimal bd2=new BigDecimal(num2);
		return bd1.divide(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	public static double round(double num,int scale){
		BigDecimal bd1=new BigDecimal(num);
		BigDecimal bd2=new BigDecimal(1);
		return bd1.divide(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
}

public class BigDecimalDemo {
	
	public static void main(String[] args) {
		String num1="39379.23412";
		String num2="68258.73529";
		System.out.println("加法操作:"+MyMath.add(num1, num2));
		System.out.println("加法操作,四舍五入(保留二位):"+MyMath.round(MyMath.add(num1, num2),2));
		System.out.println("除法操作,四舍五入(保留三位):"+MyMath.div(num1, num2,3));
	}
    /*输出结果为:
     * 加法操作:107637.96941
     * 加法操作,四舍五入(保留二位):107637.97
     * 除法操作,四舍五入(保留三位):0.577
     */
}

 

你可能感兴趣的:(BigDecimal,BigNumber)