鑑於兩個數字像兩個號碼,以便比較先前鑄成任何
val a: Any = 1
val b: Any = 2.3
如何我一般比較這兩個數字(如果不考慮這些號碼是Double
,Long
,Float
等)? 大多數帶有隱含的解決方案都不起作用,因爲兩個值都已輸入到Any
。
鑑於兩個數字像兩個號碼,以便比較先前鑄成任何
val a: Any = 1
val b: Any = 2.3
如何我一般比較這兩個數字(如果不考慮這些號碼是Double
,Long
,Float
等)? 大多數帶有隱含的解決方案都不起作用,因爲兩個值都已輸入到Any
。
由於兩個可以看作是java.lang.Number
S,你可以將它們轉換成他們並比較doubleValue
S:
(a.asInstanceOf[Number]).doubleValue < (b.asInstanceOf[Number]).doubleValue
(小心Double.NaN
S和大長值(感謝@PeterNeyens提醒)。如果你必須處理多頭也一樣,你應該使用更復雜的邏輯。)
如果你從'Long'到'Double',例如'Long.MaxValue.toDouble ==(Long.MaxValue - 1).toDouble',你也會失去精度。 –
謝謝@PeterNeyens,我已經更新了答案。 –
爲什麼鑄造它作爲'Any'第一? – cchantep
我最初收到一個我無法控制的API的Seq [Any](Spark) - 我只簡化了示例以顯示我的問題。 – Adracus
我沒有看到你從Spark那裏得到了什麼 – cchantep