을 감안할 때이 개 숫자로 주조 된 두 숫자를 비교하여 너무이전처럼 모든
val a: Any = 1
val b: Any = 2.3
어떻게 일반적으로이 두 숫자를 비교할 수 있습니다 (이 숫자 중 하나가 Double
, Long
, Float
등 관계없이 경우)? 두 값이 모두 Any
으로 형 변환되었으므로 implicits가있는 대부분의 솔루션이 작동하지 않습니다. 양쪽으로
을 감안할 때이 개 숫자로 주조 된 두 숫자를 비교하여 너무이전처럼 모든
val a: Any = 1
val b: Any = 2.3
어떻게 일반적으로이 두 숫자를 비교할 수 있습니다 (이 숫자 중 하나가 Double
, Long
, Float
등 관계없이 경우)? 두 값이 모두 Any
으로 형 변환되었으므로 implicits가있는 대부분의 솔루션이 작동하지 않습니다. 양쪽으로
은 당신이 그들의 doubleValue
들 그들에 캐스팅하고 비교할 수, java.lang.Number
들로 볼 수있다 :
(a.asInstanceOf[Number]).doubleValue < (b.asInstanceOf[Number]).doubleValue
Scala fiddle, Scala JS fiddle을.
(너무 갈망을 처리해야하는 경우에, 당신은 더 복잡한 논리를 사용합니다. Double.NaN
의 큰 긴 값 (상기시켜 주셔서 감사합니다 @PeterNeyens)에주의하십시오.) Any` '로 캐스팅 이유
'Long'에서'Double'으로 이동하면 정밀도가 떨어집니다. 예를 들어'Long.MaxValue.toDouble == (Long.MaxValue - 1) .toDouble'과 같이됩니다. –
감사합니다. @PeterNeyens, 답변을 업데이트했습니다. –
먼저? – cchantep
나는 원래 제어 할 수없는 API의'Seq [Any]'를 받았다. (Spark) - 문제를 보여주기 위해 예제를 단순화했다. – Adracus
Spark에서 얻을 수있는 부분이 보이지 않습니다. – cchantep