算法竞赛 Java 高精度 大数 小数 模版
目录
1. BigInteger类(用于整数运算)
2. BigDecimal类(用于高精度小数运算)
3. 关键要点
4. 典型应用场景
在Java里,若要对超出基本数据类型表示范围的大数进行高精度计算,可借助BigInteger
和BigDecimal
类。下面为你介绍这两个类的常见用法:
1. BigInteger类(用于整数运算)
import java.math.BigInteger;public class BigIntegerExample {public static void main(String[] args) {// 创建BigInteger对象BigInteger a = new BigInteger("12345678901234567890");BigInteger b = BigInteger.valueOf(1000); // 从long值创建// 基本运算BigInteger sum = a.add(b); // 加法BigInteger diff = a.subtract(b); // 减法BigInteger product = a.multiply(b); // 乘法BigInteger quotient = a.divide(b); // 除法BigInteger remainder = a.remainder(b); // 取余// 输出结果System.out.println("和: " + sum);System.out.println("差: " + diff);System.out.println("积: " + product);System.out.println("商: " + quotient);System.out.println("余: " + remainder);// 比较大小int compareResult = a.compareTo(b);System.out.println(a + " 与 " + b + " 的比较结果: " + compareResult); // 1表示大于,0表示等于,-1表示小于// 其他常用方法BigInteger pow = a.pow(2); // 幂运算BigInteger abs = a.abs(); // 绝对值BigInteger gcd = a.gcd(b); // 最大公约数}
}
2. BigDecimal类(用于高精度小数运算)
import java.math.BigDecimal;
import java.math.RoundingMode;public class BigDecimalExample {public static void main(String[] args) {// 创建BigDecimal对象BigDecimal a = new BigDecimal("10.25");BigDecimal b = new BigDecimal("3.14");// 基本运算BigDecimal sum = a.add(b); // 加法BigDecimal diff = a.subtract(b); // 减法BigDecimal product = a.multiply(b); // 乘法// 除法(必须指定精度和舍入模式)BigDecimal quotient = a.divide(b, 10, RoundingMode.HALF_UP); // 保留10位小数,四舍五入// 输出结果System.out.println("和: " + sum);System.out.println("差: " + diff);System.out.println("积: " + product);System.out.println("商: " + quotient);// 比较大小int compareResult = a.compareTo(b);System.out.println(a + " 与 " + b + " 的比较结果: " + compareResult);// 其他常用方法BigDecimal rounded = a.setScale(1, RoundingMode.HALF_UP); // 四舍五入保留1位小数BigDecimal abs = a.abs(); // 绝对值}
}
3. 关键要点
- 创建对象:要通过字符串或者静态方法(像
valueOf
)来创建实例,防止精度丢失。 - 不可变性:
BigInteger
和BigDecimal
对象都是不可变的,每次进行运算之后都会返回新的对象。 - 除法注意事项:进行除法运算时,必须明确指定精度和舍入模式,不然在除不尽的情况下会抛出
ArithmeticException
异常。 - 舍入模式:
-
RoundingMode.HALF_UP
:采用四舍五入的方式。RoundingMode.DOWN
:直接截断舍弃后面的数字。RoundingMode.UP
:直接进位。
4. 典型应用场景
- 金融领域的计算(要保证精确的小数位数)。
- 密码学相关的计算(处理超大整数)。
- 科学计算(需要极高的精度)。
通过运用这两个类,你能够进行任意精度的数值计算,不过要留意性能开销,因为它们的运算速度比基本数据类型要慢。