前面总结Java中的基本数据类型,一共有四类八种。但是在前面的总结中,对于数值来说都是由界限的,一旦超出了该类型能表达的最大数值就会报错。其对于浮点数来说,无论是单精度的float类型还是双精度的double类型其能表示的精度也是存在界限的。但是在在日常生活中,我们能使用的数值是无限的,那么在java中如何创造一个可以长度无限的数值呢?java中为我们提供了大数。
声明一个大数
首先在使用大数时,需要提前导入java.math包,在该包中提供了两个类:BigInteger(可以实现任意精度的整数运算)、BigDecimal(可以实现那任意精度的浮点运算)。
声明一个大数由两个方法:
- 方法一:将一个普通类型的数字转换成大数:valueOf(num),这样定义的大数,如果num直接时一个数字,则不能超过int类型的范围,如果num时一个给定的数值的long类型,那么其最大数值也不能超过long类型的最大数值,也就是说,这种方法不能定义一个任意长度的大数。
- 方法二:使用一个带字符串参数的构造器。如:BigInteger a = new BigInteger(“2124564231544248545”)。这种方法可以为变量初始化一个任意大小的数值。
java中也定义了一些大数常量,例如整型大数有:
- 0:BigInteger.ZERO
- 1:BigInteger.ONE
- 2:BigInteger.TWO
- 10:BigInteger.TEN
定义一个浮点型的大数的方法也类似,不过使用的是BigDecimal
大数的计算
大数的计算不能向普通类型那样通过算术运算符进行计算,而必须通过math提供的方法进行相应计算。例如:如果要将大数a和b相加,不能直接写成a+b,而是应该调用add方法:a.add(b)
1 | BigInteger a = BigInteger.valueOf(10); |
比较常用的方法有:
- 相加:add(BigInteger val)
- 相减:subtract(BigInteger val)
- 相乘:multiply(BigInteger val)
- 取余:divide(BigInteger val)
- 取模:mod(BigInteger m)
- 平方根:sqrt()
- 判断是否相等:compareTo(BigInteger val)
浮点型大数的运算方法也类似。
更多的方法可以通过访问在线API文档进行了解:http://www.apiref.com/java11-zh/java.base/java/math/BigDecimal.html
本文链接: https://quandongli.github.io/post/102131cd.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
