Scala 使用asInstanceOf将任意值转换为双精度值?

Scala 使用asInstanceOf将任意值转换为双精度值?,scala,Scala,是否有支持的方法实现任何数字类型到双精度的转换。例如 val i = 12345 val f = 1234.5F val d = 1234.5D val arr = Array[Any](i,f,d) val anotherD = arr(0).asInstanceOf[Numeric].toDouble 当然,上面的代码并不正确,因为Numeric需要类型参数 scala> val i = 12345 i: Int = 12345 scal

是否有支持的方法实现任何数字类型到双精度的转换。例如

   val i = 12345
   val f = 1234.5F
   val d = 1234.5D
   val arr = Array[Any](i,f,d)
   val anotherD = arr(0).asInstanceOf[Numeric].toDouble
当然,上面的代码并不正确,因为Numeric需要类型参数

scala>        val i = 12345
i: Int = 12345

scala>        val f = 1234.5F
f: Float = 1234.5

scala>        val d = 1234.5D
d: Double = 1234.5

scala>        val arr = Array[Any](i,f,d)
arr: Array[Any] = Array(12345, 1234.5, 1234.5)

scala>        val anotherD = arr(0).asInstanceOf[Numeric].toDouble
<console>:11: error: type Numeric takes type parameters
              val anotherD = arr(0).asInstanceOf[Numeric].toDouble
scala>val i=12345
i:Int=12345
scala>val f=1234.5F
f:浮动=1234.5
scala>val d=1234.5D
d:Double=1234.5
scala>val arr=Array[Any](i,f,d)
arr:Array[Any]=数组(123451234.51234.5)
scala>val anotherD=arr(0)。asInstanceOf[Numeric]。toDouble
:11:错误:type Numeric接受类型参数
val anotherD=arr(0)。asInstanceOf[Numeric]。toDouble
现在,我意识到可以通过match/case实现上述功能,大致如下:

  (a, e) match {
    case (a : Double, e : Double) =>
        Math.abs(a - e) <= CompareTol
    case (a : Float, e : Float) =>
        Math.abs(a - e) <= CompareTol
    .. etc
(a,e)匹配{
案例(a:Double,e:Double)=>
数学abs(a-e)
abs(a-e)这很可怕,但是(在你的例子中)它是有效的:p


我假设您在JVM上。该类与您希望通过
doubleValue
方法实现的目标非常相似:

val arr = Array[Number](i,f,d)
val ds = arr.map(_.doubleValue())

我同意这样的想法。有时我不想要花哨/冗长的代码:在这种情况下,它在测试类中,效率不是标准。非常适合我的用例
val arr = Array[Number](i,f,d)
val ds = arr.map(_.doubleValue())