魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • Language - Java - Java SE - API - 「java.math」

文章摘要: 提供了一些用于执行任意精度整数运算(BigInteger)和任意精度浮点数运算(BigDecimal)的类。

介绍

简要说明

  • 提供了一些用于执行任意精度整数运算(BigInteger)和任意精度浮点数运算(BigDecimal)的类。
  • 适用于那些需要超出标准 Java 基本数据类型(如 int、long、float、double)精度范围的计算。

主要功能

  • BigInteger:用于表示不可变的任意精度的整数。可以执行所有基本的数学运算,如加、减、乘、除,以及模运算。
  • BigDecimal:用于表示不可变的任意精度的浮点数。它提供了精确的数值运算,避免了二进制浮点运算中常见的精度问题。

注意事项

  • 性能:BigInteger 和 BigDecimal 的操作通常比原始数据类型的操作要慢,因为它们提供了更高的精度和更大的数值范围。
  • 精度:在使用 BigDecimal 进行运算时,需要注意精度和舍入模式,以避免意外的结果。
  • 不可变性:BigInteger 和 BigDecimal 都是不可变的,所有的运算都会返回一个新的实例。
  • 初始化:在创建 BigInteger 或 BigDecimal 实例时,应使用字符串构造器来避免由浮点数构造器引入的精度问题。

适用场景

  • 高精度整数运算:当整数的大小超出了 long 类型的范围时,或者需要执行精确的整数运算时,使用 BigInteger。
  • 金融计算:在金融应用程序中,经常需要精确的货币计算,BigDecimal 用于避免浮点数运算中的舍入误差。
  • 科学计算:在需要非常高精度的科学计算中,BigDecimal 提供了比 double 更精确的数值表示。
  • 精确的数学运算:任何需要精确数学运算的场景,例如在需要精确结果的算法中。

BigInteger

BigInteger 类用于表示不可变的任意精度的整数。它可以用于表示比 long 类型更大的整数值。

主要特性:

  • 不可变性: 一旦创建了 BigInteger 对象,其值就不能更改。
  • 大数运算: 支持所有基本的数学运算,如加、减、乘、除等。

常用构造方法:

  • BigInteger(String val): 根据字符串构建 BigInteger。
  • BigInteger(byte[] val): 根据字节数组构建 BigInteger。

常用方法:

  • add(BigInteger val): 返回两个大整数的和。
  • subtract(BigInteger val): 返回两个大整数的差。
  • multiply(BigInteger val): 返回两个大整数的乘积。
  • divide(BigInteger val): 返回两个大整数的商。
  • remainder(BigInteger val): 返回两个大整数相除的余数。
  • gcd(BigInteger val): 返回大整数的最大公约数。
  • modPow(BigInteger exponent, BigInteger m): 返回大整数的指数运算结果的模。
  • modInverse(BigInteger m): 返回大整数的模逆。
  • shiftLeft(int n): 将大整数左移 n 位。
  • shiftRight(int n): 将大整数右移 n 位。
  • and(BigInteger val), or(BigInteger val), xor(BigInteger val): 执行位运算。
  • compareTo(BigInteger val): 比较两个大整数的大小。

BigDecimal

BigDecimal 类用于表示不可变的任意精度的十进制数。它常用于金融应用程序和需要高精度计算的场合。

主要特性:

  • 不可变性: 与 BigInteger 一样,BigDecimal 也是不可变的。
  • 精确十进制运算: BigDecimal 提供了精确的十进制运算。

常用构造方法:

  • BigDecimal(String val): 根据字符串构建 BigDecimal。
  • BigDecimal(double val): 根据双精度浮点数构建 BigDecimal(不建议使用,因为 double 本身是不精确的)。

常用方法:

  • add(BigDecimal augend): 返回两个 BigDecimal 的和。
  • subtract(BigDecimal subtrahend): 返回两个 BigDecimal 的差。
  • multiply(BigDecimal multiplicand): 返回两个 BigDecimal 的乘积。
  • divide(BigDecimal divisor, int scale, RoundingMode roundingMode): 返回两个 BigDecimal 的商,可以指定小数点后的位数和舍入模式。
  • setScale(int newScale, RoundingMode roundingMode): 设置 BigDecimal 的小数位数,并指定舍入模式。
  • compareTo(BigDecimal val): 比较两个 BigDecimal 的大小。
  • stripTrailingZeros(): 返回一个 BigDecimal,其表示去掉尾随零的数值。
  • precision(): 返回 BigDecimal 的精度。
  • setScale(int newScale): 设置 BigDecimal 的小数位数。

舍入模式(RoundingMode):

  • UP: 向远离零的方向舍入。
  • DOWN: 向接近零的方向舍入。
  • CEILING: 向正无穷大方向舍入。
  • FLOOR: 向负无穷大方向舍入。
  • HALF_UP: 四舍五入。
  • HALF_DOWN: 五舍六入。
  • HALF_EVEN: 向最近的偶数舍入。

学习总结

  • 精度问题: 在处理金融数据和高精度计算时,应使用 BigDecimal 而不是 double 或 float。
  • 构造方法: 避免使用 BigDecimal(double) 构造方法,因为它可能会导致精度损失。
  • 舍入模式: 根据具体需求选择合适的舍入模式。
  • 性能考虑: BigInteger 和 BigDecimal 的运算比基本类型要慢,因此在不必要的情况下应避免使用。
  • 不可变性: 由于 BigInteger 和 BigDecimal 是不可变的,每次运算都会创建一个新的对象。
  • 方法链: 可以通过方法链的方式连续调用方法,以编写更简洁的代码。
更新时间: 2025/11/16 17:17