比较之前被转换为 Any 的两个数字

Compare two numbers that were previously casted as Any

给定两个这样的数字

val a: Any = 1
val b: Any = 2.3

我如何一般地比较这两个数字(无论其中一个数字是 DoubleLongFloat 等)? 大多数带有隐式的解决方案都不起作用,因为两个值都已转换为 Any.

因为两者都可以看作是 java.lang.Number,您可以将它们转换为它们并比较它们的 doubleValue

(a.asInstanceOf[Number]).doubleValue < (b.asInstanceOf[Number]).doubleValue

Scala fiddle, Scala JS fiddle.

(小心 Double.NaNs 和大的 long 值(感谢@PeterNeyens 提醒)。如果你也必须处理 long,你应该使用更复杂的逻辑。)