商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Java中 BigDecimal max 和 min 怎么比较获取较大值与较小值

Java中 BigDecimal max 和 min 怎么比较获取较大值与较小值

  发布于2026-07-15 阅读(0)

扫一扫,手机访问

先说个基础:BigDecimal的maxmin方法,直接返回数值较大或较小的那个对象引用。它俩比较的是真实数值大小,不是字符串,精度不同时会自动对齐,而且不接受null参数。

Ja va中 BigDecimal max 和 min 怎么比较获取较大值与较小值

BigDecimal 的 maxmin 方法,说白了就是直接返回较大的或较小的那个值,省去了手动比较的麻烦。它们是实例方法,调用时传另一个 BigDecimal 对象进去就行。内部比较的是数值大小(不是字符串),结果要么是原对象,要么是参数对象的引用,不会创建新对象。前提是两者精度一致;如果精度不同,它会先对齐精度再比较。

先说说它俩的基本用法

这两个都是 BigDecimal 类的实例方法,语法挺直观的:

  • a.max(b) 返回 ab 中数值更大的那个
  • a.min(b) 返回 ab 中数值更小的那个
  • 返回值类型还是 BigDecimal,可以链式调用或者赋值给变量

注意,这里比较的是数值大小,不是字符串

max/min 比较的是真实数值大小,跟 compareTo() 一样,不受 scale(小数位数)影响:

  • new BigDecimal("1.0").max(new BigDecimal("0.999")) 结果是 1.0(不是按字符串 "1.0" > "0.999" 判定的)
  • new BigDecimal("2").min(new BigDecimal("1.50")) 结果是 1.50(因为数值 1.5 小于 2)
  • 底层用的是 compareTo(),所以如果你传 null 进去,直接就是 NullPointerException

一些容易踩的坑,得注意

实际用起来,有些细节容易忽略,结果可能跟预期不一样:

  • 别用 equals() 判断相等性后再调 max/min —— max(a, a) 肯定返回 a,但 equals() 可能因为 scale 不同返回 false
  • 如果需要统一 scale 再比较(比如展示一致性),建议先用 setScale(scale, roundingMode) 规范化,然后再调 max/min
  • 多个值求最值?可以用 Stream: Stream.of(a, b, c).max(BigDecimal::compareTo).orElse(null)

null 安全处理这步不能省

maxmin 不接受 null 参数,运行时直接抛异常。建议提前做校验:

  • Objects.requireNonNull(a).max(Objects.requireNonNull(b)) 明确失败点
  • 或者封装个工具方法,比如:static BigDecimal safeMax(BigDecimal a, BigDecimal b) { return a == null ? b : b == null ? a : a.max(b); }
  • 业务里常配合 Optional 或默认值使用,避免空指针
本文转载于:https://www.php.cn/faq/2823234.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注