【大数】范围超越Long和Double的数据类型

精度大于longdouble的数据类型

大数

当整数的范围超过了long所能表示的范围,或浮点数的精度超过了double所覆盖的范围,Java中提供了两个类用于表示这种大数。

java.math包中的BigInteger类和BigDecimal类可以处理任意长度数字序列的数值,前者提供整数运算,后者提供浮点数运算。

使用方法:

可以将一个普通的数转换成大数:

BigInteger a = BigInteger.valueOf(100);

BigDecimal b = new BigDecimal(0.1);(不推荐,会产生误差!)

更推荐使用以数字字符串为参数的大数构造器来生成大数:

BigInteger a = new BigInteger("2131231231231312");

BigDecimal b = new BigDecimal("1.232314141322131231");

对于大数,不能直接和普通数进行运算,必须将普通数转为大数才能进行运算。

常见的大数常量有:

  • BigInteger.ZERO
  • BigInteger.ONE
  • BigInteger.TWO
  • BigInteger.TEN

同样的,大数之间的运算也不能使用脚本基本运算符来运算,而是要使用大数类中的运算方法来运算。

技巧

BigInteger a = new BigInteger(“2131231231231312”);

a. add(b); //a,b均为BigInteger类型,加法

a.subtract(b); //减 法

a.divide(b); //除法

a.multiply(b); //乘法

a.equals(b); //如果a、b相等返回true否则返回false

a.compareTo(b); //a小于b返回-1,等于返回0,大于返回1,0和1都是普通int

a.mod(b); //求余

a.gcd(b); //求最大公约数

a.max(b); //求最大值

a.min(b); //求最小值

a.toString().length(); //求大数的长度

wuqimotou 微信微信
0%