/**
*
*/
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
*/
}