国内网站制作欣赏创建自己的网页
Java关于大数处理Java.math里面有两个类:BigInteger 和 BigDecimal.前者是大整数处理,后者是高精度处理。其实两者的使用方法都是十分类似的,他们没有普通的数学运算符操作(+,-,*,/,%),所有这些操作都是通过函数来实现的,并且一般的函数参数也都是大数(BigDecimal或BigInteger对象)。
BigInteger的使用:
//求阶乘@Testpublic void test1(){BigInteger bigInteger = new BigInteger("1");for (int i = 1; i < 600; i++) {bigInteger = bigInteger.multiply(BigInteger.valueOf(i));}System.out.println(bigInteger);}
这里就展示乘法的使用,加法是add(),减法是delete(),除法是subtract(),使用方法十分简单,调用的时候里面可以new 对象,也可以使用valueOf()
BigDecimal的使用:
@Testpublic void test1(){BigDecimal b = new BigDecimal(0);for (int i = 0; i < 10; i++) {b = b.add(new BigDecimal(0.1));}System.out.println(b);//1.0000000000000000555111512312578270211815834045410156250}
观察输出可以知道,就算是高精度的处理也有她的局限性,但其实办法总比困难多的,请看下文:
@Testpublic void test2(){BigDecimal b = new BigDecimal(0);for (int i = 0; i < 10; i++) {b = b.add(new BigDecimal(0.1));}System.out.printf("%.1f",b);//1.0}@Testpublic void test3(){BigDecimal b = new BigDecimal(0);for (int i = 0; i < 10; i++) {b = b.add(BigDecimal.valueOf(0.1));//没有后面的多余数据}System.out.println(b);//1.0}
我也有在网上看过别人写的方法,用的是API里面的scale,或者是DecimalFormat,都很麻烦,建议计算的时候使用下面这两种方法,至于为什么new BifDecimal 和 valueOf()两种方法的区别原由,可以通过看API知道,后者是使用了toString的方法,所以使用valueOf的时候数据转换为bigDecimal的时候是精确的