是否支持将任何数字类型转换为double的方法。 E.g。
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需要Type参数。
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
现在我意识到上述内容可以通过匹配/案例实现,顺序如下:
(a, e) match {
case (a : Double, e : Double) =>
Math.abs(a - e) <= CompareTol
case (a : Float, e : Float) =>
Math.abs(a - e) <= CompareTol
.. etc
但我想知道是否有办法更紧凑地表达操作。此代码在TEST类中,效率不是一个重要标准。具体来说:反射调用是可以的。感谢。
答案 0 :(得分:5)
我假设你在JVM上。 Number类确实与您希望使用doubleValue
方法实现的目标相同:
val arr = Array[Number](i,f,d)
val ds = arr.map(_.doubleValue())
答案 1 :(得分:2)
这太可怕了,probably not efficient,但它有效(在你的例子中):p
scala> import scala.language.reflectiveCalls
import scala.language.reflectiveCalls
scala> arr.map(_.asInstanceOf[{ def toDouble: Double }].toDouble)
res2: Array[Double] = Array(12345.0, 1234.5, 1234.5)