玩转大数(BigInteger):
1.基本数据类型的值要转换成大数(经常会用到),用下面两种方法1)构造方法
2)valueOf()方法
2.加、减、乘、除、取模等常用数学运算全部用函数来实现,不能数学用运算符。 并且一般的函数参数都是大数对象,不能用数值,也不能用整数及包装类变量。 还要注意,一般的函数在进行大数运算时,不是原地修改,而是返回修改结果。
3.每个大数变量是一个BigInteger类型的对象,不是普通变量,也不是一个数值
import java.math.BigInteger;import org.junit.Test;
/*** Time:2018/4/5* Description:学习BigInteger类* @author 宋进宇*/
public class BigIntegerDemo {@Testpublic void test1(){long l = factorial(50);System.out.println(l);//-3258495067890909184 输出结果为负数,说明结果超过long型值的范围}/*** 基本数据类型求阶乘i!* @param i-阶乘因子* @return 阶乘结果*/private long factorial(int i) {long l=1;for (int j = 2; j <= i; j++) {l*=j;}return l;}@Testpublic void test2(){BigInteger bi = factorial2(50);System.out.println(bi);//30414093201713378043612608166064768844377641568960512000000000000//结果正确}/*** BigInteger求阶乘i!* @param i-阶乘因子* @return 阶乘结果*/private BigInteger factorial2(int i) {BigInteger bi = BigInteger.ONE;for (int j = 2; j <= i; j++) {bi = bi.multiply(BigInteger.valueOf(j));}return bi;}
}
玩转BigDecimal:
BigDecimal的用法和BigInteger非常类似,因为都是大数。 因此也没有普通的数学运算符操作(+,-,*,/,%),所有这些操作都是通过函数来实现的,并且一般的函数参数也都是大数(BigDecimal或BigInteger对象)
import java.math.BigDecimal;import org.junit.Test;/*** Time:2018/4/5* Description:BigDecimal类的学习* @author 宋进宇*/
public class BigDecimalDemo {@Testpublic void test1(){double sum = 0.0;for (int i = 0; i < 10; i++) {sum+=0.1;}System.out.println(sum);//结果为0.9999999999999999//按常理来说结果应该为1.0,但是由于浮点数运算结果有时会是近似值,//有时会是正确值,比如当i等于5是结果为:0.5是想要的结果。//因此我们可以采用BigDecimal来进行处理,它可以精确计算}@Testpublic void test2(){BigDecimal bd = new BigDecimal(0);for (int i = 0; i < 10; i++) {bd = bd.add(BigDecimal.valueOf(0.1));//bd = bd.add(new BigDecimal(0.1));}System.out.println(bd);//结果为1.0是我们想要的结果//但是要注意,使用BigDecimal时,add()方法里面的参数应该用BigDecimal.valueOf(0.1)//如果参数用new BigDecimal(0.1)会出现//1.0000000000000000555111512312578270211815834045410156250//所以使用BigDecimal进行运算时,参数用BigDecimal.valueOf(0.1)这种方式。}
}