大数值
大数值
先来看一个例子吧:
1 | System.out.println(Long.MAX_VALUE);//9223372036854775807 |
long
是最大的整型了,但是我们遇到比再大一点的数怎么办?
这时候就引入了大数值两个类BigInteger
和BigDecimal
这两个类并非是一个数,是模拟出来的数,在类的内部使用了数组(BigInteger
使用了int[]
)来模拟任意大小的数,前者是整数,后者是浮点数
BigInteger
BigInteger可以表示任意大小的整数
1 | System.out.println(Long.MAX_VALUE);//9223372036854775807 |
但是BigInteger
的加减乘除只可以使用方法来运算,而且运算对象只能是相同的类型
1 | BigInteger big1 = new BigInteger(String.valueOf(Long.MAX_VALUE)); |
转换
转换成基本类型,例如转换为long
型
1 | public long longValue() |
如下
1 | BigInteger big1 = new BigInteger(String.valueOf(Long.MAX_VALUE)); |
同样转换 int float double short byte
都有对应的方法
如果BigInteger
的值甚至超过了float
的最大范围(3.4x10^38
),那么返回的float
是什么呢
1 | BigInteger n = new BigInteger("999999").pow(99); |
BigDecimal
如果查看BigDecimal
的源码,可以发现,实际上一个BigDecimal
是通过一个BigInteger
和一个scale
来表示的,即BigInteger
表示一个完整的整数,而scale
表示小数位数:
1 | public class BigDecimal extends Number implements Comparable<BigDecimal> { |
基本方法
1 | public int scale() |
除此之外还有加减乘除方法,其中除法要注意,有可能出现除不尽的状况,要注意添加截断方法
1 | BigDecimal d1 = new BigDecimal("123.456"); |
BigDecimal
可以做除法同时求余数divideAndRemainder()
1 | BigDecimal n = new BigDecimal("12.345"); |
比较
1 | equals() |
所以比较两个BigDecimal
的时候,使用compareTo
比较
廖雪峰官方网站
官方API