2016-06-29 8 views
0

考えると二つの数字としてキャストされた2つの数値を比較のでが以前のように任意の

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

どのように私は一般的にこれらの2つの数値を比較することができます(これらの数字の1がDoubleLongFloatなどであるかどうかに関係なく)? implicitsを持つソリューションのほとんどは、両方の値がAnyにキャストされているため、機能しません。両方がjava.lang.Number sと見ることができるように

+0

最初? – cchantep

+0

私は制御できないAPIの 'Seq [Any]'を最初に受け取った(Spark) - 私は問題を示すために例を簡略化した。 – Adracus

+0

Sparkからそれを得る場所がわかりません – cchantep

答えて

2

、あなたは彼らにそれらをキャストし、そのdoubleValue秒比較することができます:

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

Scala fiddleScala JS fiddleを。

(あなたもlong型を処理する必要が場合は、あなたがより複雑なロジックを使用する必要があります。Double.NaN sおよび大long値(思い出させるためのおかげ@PeterNeyens)に注意してください。)Any` `としてそれをキャストするのはなぜ

+0

'Long'から' Double'に行くと精度が失われます。例えば 'Long.MaxValue.toDouble ==(Long.MaxValue - 1).toDouble'です。 –

+0

ありがとう@PeterNeyens、私は答えを更新しました。 –

関連する問題