大数字操作指的是数字非常的大,大到已经超过了整个数据类型的保存范围,例如:9999999999999999999999999999*9999999999999999999999999997所以,此时就需要使用对象的形式进行操作。在最在如果碰到以上的问题,实际上都是采用了字符串的形式进行处理。Java中为了解决这样的难题提供了两个大数字对象:BigInteger、BigDecimal
1、BigInteger
表示大的整型数据,此类的定义为:
public class BigInteger
BigInteger的操作代码示例如下:
package org.mole.normlaclass;
import java.math.BigInteger;
public class BigIntegerDemo {
public static void main(String[] args) {
String num1 = "9999999999999999999999999999";
String num2 = "9999999999999999999999999997";
BigInteger big1 = new BigInteger(num1);
BigInteger big2 = new BigInteger(num2);
System.out.println("加法:"+big1.add(big2));
System.out.println("减法:"+big1.subtract(big2));
System.out.println("乘法:"+big1.multiply(big2));
System.out.println("除法:"+big1.divide(big2));//没有余数,直接取整
BigInteger result[] = big1.divideAndRemainder(big2);//进行触发,有余数
System.out.println("相除之后的商是:"+result[0]);
System.out.println("相除之后的余数是:"+result[1]);
}
}
执行结果如下:
2、BigDecimal
BigDecimal类的主要功能是进行小数的大数计算,而且最重要的是可以精确到制定的四舍五入位数。如果要想进行四舍五入的操作,则必须依靠以下的方法:
public BigDicimal divide(BigDecimal divisor,int scale,int roundingMode)其中,scale表示四舍五入的位数,roundingMode表示四舍五入的操作模式,ROUND_HALF_UP
示例代码如下:
package org.mole.normlaclass;
import java.math.BigDecimal;
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 = "12345.07891";
String num2 = "3333.5101";
System.out.println("加法:"+MyMath.round(MyMath.add(num1, num2), 2));
System.out.println("减法:"+MyMath.round(MyMath.sub(num1, num2), 2));
System.out.println("乘法:"+MyMath.round(MyMath.mul(num1, num2), 13));
System.out.println("除法:"+MyMath.div(num1, num2, 2));
}
}
程序运行结果如下:
本文内容参考了魔乐科技的教程