大数操作(BigInteger类、BigDecimal类)
BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息。
BigDecimal:可以精确地表示任意精度的小数,同时在运算过程中不会丢失任何信息,并且可以指定保留的小数位数,进行精确的四舍五入 这两个类都位于java.math包中 一.BigInteger类 正常情况下一个整数最多只能放在long类型中,但是如果出现如:123455555555555555555555522222222这么大的数根本无法保存,所以为了解决这样的问题,java中引入了操作大数的操作类 *操作整数:BigInteger *操作小数:BigDecimal BigInteger类中的部分方法: import java.math.BigInteger; public class BigIntegerDemo01{ public static void main(String[] args){ BigInteger bi1 = new BigInteger("123456789"); BigInteger bi2 = new BigInteger("987654321"); System.out.println("加法操作:"+bi2.add(bi1)); System.out.println("减法操作:"+bi2.subtract(bi1)); System.out.println("乘法操作:"+bi2.multiply(bi1)); System.out.println("除法操作:"+bi2.divide(bi1)); System.out.println("求最大值:"+bi2.max(bi1)); System.out.println("求最小值:"+bi2.min(bi1)); } } 可以看到上面的除法操作也不是精确的,所以可以使用BigInteger中的divideAndRemainder()方法 import java.math.BigInteger; public class BigIntegerDemo01{ public static void main(String[] args){ BigInteger bi1 = new BigInteger("123456789"); BigInteger bi2 = new BigInteger("987654321"); System.out.println("加法操作:"+bi2.add(bi1)); System.out.println("减法操作:"+bi2.subtract(bi1)); System.out.println("乘法操作:"+bi2.multiply(bi1)); System.out.println("求最大值:"+bi2.max(bi1)); System.out.println("求最小值:"+bi2.min(bi1)); BigInteger result[] = bi2.divideAndRemainder(bi1); System.out.println("除法操作:"+"商等于:"+result[0]+"余数等于:"+result[1]); } } 二.BigDecimal类 BigDecimal方法也位于java.math包中 public class BigDecimal extends Number implements Comparable<BigDecimal> 其中,BigDecimal类中还有方法public double doubleValue() 将此 BigDecimal 转换为 double 下面看一下利用BigDecimal进行运算: import java.math.BigDecimal; class MyMath{ public static double add(double d1,double d2){ BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.add(b2).doubleValue(); } public static double sub(double d1,double d2){ BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.subtract(b2).doubleValue(); } public static double mul(double d1,double d2){ BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.multiply(b2).doubleValue(); } } public class BigDecimalDemo{ public static void main(String[] args){ System.out.println("加法运算:"+MyMath.add(10.345,3.333)); System.out.println("减法运算:"+MyMath.sub(10.345,3.333)); System.out.println("乘法运算:"+MyMath.mul(10.345,3.333)); } } 这里没有做除法,因为除法要四舍五入,下面我们具体看一下: public BigDecimal divide(BigDecimal divisor,?int scale,?int roundingMode) import java.math.BigDecimal; class MyMath{ public static double add(double d1,double d2){ BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.multiply(b2).doubleValue(); } public static double div(double d1,double d2,int len){ BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue(); } public static double round(double d,int len){ BigDecimal b1 = new BigDecimal(d); BigDecimal b2 = new BigDecimal(1); return b1.divide(b2,BigDecimal.ROUND_HALF_UP).doubleValue(); } } public class BigDecimalDemo{ public static void main(String[] args){ System.out.println("加法运算:"+MyMath.round(MyMath.add(10.345,3.333),1)); System.out.println("减法运算:"+MyMath.round(MyMath.sub(10.345,3)); System.out.println("乘法运算:"+MyMath.round(MyMath.mul(10.345,4)); System.out.println("除法运算:"+MyMath.div(10.345,3.333,3)); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |