大数值
大数值
先来看一个例子吧:
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