2016-06-29 16 views
0

鑑於兩個數字像兩個號碼,以便比較先前鑄成任何

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

如何我一般比較這兩個數字(如果不考慮這些號碼是DoubleLongFloat等)? 大多數帶有隱含的解決方案都不起作用,因爲兩個值都已輸入到Any

+0

爲什麼鑄造它作爲'Any'第一? – cchantep

+0

我最初收到一個我無法控制的API的Seq [Any](Spark) - 我只簡化了示例以顯示我的問題。 – Adracus

+0

我沒有看到你從Spark那裏得到了什麼 – cchantep

回答

2

由於兩個可以看作是java.lang.Number S,你可以將它們轉換成他們並比較doubleValue S:

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

Scala fiddleScala JS fiddle

(小心Double.NaN S和大長值(感謝@PeterNeyens提醒)。如果你必須處理多頭也一樣,你應該使用更復雜的邏輯。)

+0

如果你從'Long'到'Double',例如'Long.MaxValue.toDouble ==(Long.MaxValue - 1).toDouble',你也會失去精度。 –

+0

謝謝@PeterNeyens,我已經更新了答案。 –