【发布时间】:2012-09-15 16:53:01
【问题描述】:
我想比较Number 的两个任意实例以找出哪个更大。如您所知,它们可能是整数、长整数或双精度数,也可能是大整数或大小数。那么该怎么办呢?
- 号码未实现Comparable。
- 不能使用
doubleValue(),因为 BigDecimals 或 BigIntegers 可能会损失精度。
我真的需要进行实例测试和铸造吗? 必须有一些图书馆可以做到这一点。但是我已经检查了 Apache Commons 和 Guava,但没有运气。
编辑 1: 评论指出了这一点:Comparing the values of two generic Numbers。它有一个解决方案,可以使用toString() 将所有内容转换为 BigDecimal。真的没有更好的方法吗?
编辑 2: 我刚刚发布了 my own version as an answer to the other question。它应该比公认的答案更有效、更健壮。
【问题讨论】:
-
将任何内容转换为
BigDecimal? -
查看此答案和其中的链接:stackoverflow.com/a/3214469/44522
-
为什么要比较任意 Number 类?为什么它们不都是同一类型?
-
好问题,一定要看@MicSim提供的链接
-
我同意 SJuan76。我也最终找到了一种将任何 Number 转换为 BigDecimal 然后进行比较的方法。