Possible Duplicate:
Comparing the values of two generic Numbers
我想比较 Number 的两个任意实例找出哪个更大。如您所知,它们可能是整数、长整数或 double ,也可能是大整数或大小数。那么该怎么办呢?
- 号码未实现 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 .它应该比公认的答案更有效、更健壮。
最佳答案
您不能比较 Number
类型的两个任意实例,因为这可能是无休止的操作。想象两个无理数,唯一的区别是十亿位小数。为此,您必须比较数十亿个小数。
您需要将您的 Number
实例转换为 BigDecimal
,根据需要应用舍入,然后比较这两者。
关于java - 如何在 Java 中比较两个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12561485/