比较之前被转换为 Any 的两个数字
Compare two numbers that were previously casted as Any
给定两个这样的数字
val a: Any = 1
val b: Any = 2.3
我如何一般地比较这两个数字(无论其中一个数字是 Double
、Long
、Float
等)?
大多数带有隐式的解决方案都不起作用,因为两个值都已转换为 Any
.
因为两者都可以看作是 java.lang.Number
,您可以将它们转换为它们并比较它们的 doubleValue
:
(a.asInstanceOf[Number]).doubleValue < (b.asInstanceOf[Number]).doubleValue
Scala fiddle, Scala JS fiddle.
(小心 Double.NaN
s 和大的 long 值(感谢@PeterNeyens 提醒)。如果你也必须处理 long,你应该使用更复杂的逻辑。)
给定两个这样的数字
val a: Any = 1
val b: Any = 2.3
我如何一般地比较这两个数字(无论其中一个数字是 Double
、Long
、Float
等)?
大多数带有隐式的解决方案都不起作用,因为两个值都已转换为 Any
.
因为两者都可以看作是 java.lang.Number
,您可以将它们转换为它们并比较它们的 doubleValue
:
(a.asInstanceOf[Number]).doubleValue < (b.asInstanceOf[Number]).doubleValue
Scala fiddle, Scala JS fiddle.
(小心 Double.NaN
s 和大的 long 值(感谢@PeterNeyens 提醒)。如果你也必须处理 long,你应该使用更复杂的逻辑。)