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

时间:2016-06-29 13:22:01

标签: scala generics numeric

给出两个这样的数字

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

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

1 个答案:

答案 0 :(得分:2)

由于两者都可以被视为java.lang.Number,您可以将它们投射到它们并比较它们的doubleValue

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

Scala fiddleScala JS fiddle

(小心Double.NaN和大长值(感谢@PeterNeyens提醒)。如果你还需要处理多头,你应该使用更复杂的逻辑。)