2016-06-29 3 views
0

을 감안할 때이 개 숫자로 주조 된 두 숫자를 비교하여 너무이전처럼 모든

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

어떻게 일반적으로이 두 숫자를 비교할 수 있습니다 (이 숫자 중 하나가 Double, Long, Float 등 관계없이 경우)? 두 값이 모두 Any으로 형 변환되었으므로 implicits가있는 대부분의 솔루션이 작동하지 않습니다. 양쪽으로

+0

먼저? – cchantep

+0

나는 원래 제어 할 수없는 API의'Seq [Any]'를 받았다. (Spark) - 문제를 보여주기 위해 예제를 단순화했다. – Adracus

+0

Spark에서 얻을 수있는 부분이 보이지 않습니다. – cchantep

답변

2

은 당신이 그들의 doubleValue들 그들에 캐스팅하고 비교할 수, java.lang.Number들로 볼 수있다 :

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

Scala fiddle, Scala JS fiddle을.

(너무 갈망을 처리해야하는 경우에, 당신은 더 복잡한 논리를 사용합니다. Double.NaN의 큰 긴 값 (상기시켜 주셔서 감사합니다 @PeterNeyens)에주의하십시오.) Any` '로 캐스팅 이유

+0

'Long'에서'Double'으로 이동하면 정밀도가 떨어집니다. 예를 들어'Long.MaxValue.toDouble == (Long.MaxValue - 1) .toDouble'과 같이됩니다. –

+0

감사합니다. @PeterNeyens, 답변을 업데이트했습니다. –