Java之BigInteger与BigDecimal

xiaoxiao2025-04-12  14

最近刷题遇到一些关于大数的题。原来一直用数组去做,最近才知道Java中封装了BigDecimal与BigInteger类,用来操作大数的,更加方便,功能更齐全。现在将其整理如下

BigInteger与BigDecimal

介绍
BigInteger与BigDecimal是在封装在java.math包中的(注意与Java.lang.Math类的区别)。BigInteger是用来操作整数的。BigInteger 提供所有 Java的基本整数操作符的对应物,并提供 java.lang.Math的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD计算、质数测试、素数生成、位操作以及一些其他操作。BigDecimal是用来操作浮点数的。BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。
用法

因为BigInteger与BigDecimal两个类的方法比较相似,我就只用BigInteger来做举例。关于未提到的方法,请大家阅读Java API文档。 举例

import java.math.BigDecimal; import java.math.BigInteger; public class Demo { public static void main(String[] args) { BigInteger bi1 = new BigInteger("22222222222222222222222222222222222222"); BigInteger bi2 = new BigInteger("11111111111111111111111111111111111111"); System.out.println("加法:"+bi1.add(bi2)); System.out.println("减法:"+bi1.subtract(bi2)); System.out.println("乘法:"+bi1.multiply(bi2)); System.out.println("除法:"+bi1.divide(bi2)); BigInteger bi3 = new BigInteger("457889217565949786284022605"); BigInteger[] reminder = bi1.divideAndRemainder(bi3); //返回包含 (this / val) 后跟 (this % val) 的两个 BigInteger 的数组。 System.out.println(bi1 + "/" + bi3 + "=" + reminder[0] + "..." +reminder[1]); //BigDecimal的初始化 BigDecimal bd1 = new BigDecimal(bi3,2); //bd1 = bi3/100; BigDecimal bd2 = new BigDecimal("1594683486.489491878648941864"); System.out.println(bd1); System.out.println(bd2); } }
BigInteger与BigDecimal实现原理

这里简单说说BigInteger与BigDecimal的原理,便于大家理解。

BigInteger就是用int数组来实现保存任意精度的整数。BigDecimal就是BigInteger的原理,将小数扩大成整数,在用scale表示小数点的位置。十进制(BigInteger)+小数点位置(scale)来表示小数。比如:123.45就是BigInteger为12345,scale为2。
转载请注明原文地址: https://www.6miu.com/read-5028069.html

最新回复(0)