Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Scala中将未知类标记转换为浮点_Arrays_Scala_Casting_Type Conversion - Fatal编程技术网

Arrays 在Scala中将未知类标记转换为浮点

Arrays 在Scala中将未知类标记转换为浮点,arrays,scala,casting,type-conversion,Arrays,Scala,Casting,Type Conversion,我有一个名为data的变量。此数据的类型为数组[ED]。现在在运行时,ED的类型可以是Integer或Double。我想把这个数组转换成数组[Float]的数组。我尝试了data.map(x=>x.asInstanceOf[Float].floatValue),但不幸的是,它返回了ClassCastException异常。我想知道转换此数组的正确方法是什么?任何数值值都可以转换为浮点值 def toFloat[N](n :N)(implicit ev :Numeric[N]) :Float =

我有一个名为
data
的变量。此数据的类型为
数组[ED]
。现在在运行时,ED的类型可以是
Integer
Double
。我想把这个数组转换成
数组[Float]
的数组。我尝试了
data.map(x=>x.asInstanceOf[Float].floatValue)
,但不幸的是,它返回了ClassCastException异常。我想知道转换此数组的正确方法是什么?

任何
数值
值都可以转换为
浮点值

def toFloat[N](n :N)(implicit ev :Numeric[N]) :Float =
  ev.toDouble(n).floatValue()

toFloat(9)     //res0: Float = 9.0
toFloat(9.2D)  //res1: Float = 9.2

但是,如果编译器不将您的
ED
类型识别为
数值
,则这不会有帮助。

任何
数值
值都可以转换为
浮点值

def toFloat[N](n :N)(implicit ev :Numeric[N]) :Float =
  ev.toDouble(n).floatValue()

toFloat(9)     //res0: Float = 9.0
toFloat(9.2D)  //res1: Float = 9.2

但是,如果编译器不将您的
ED
类型识别为
数值
类型,则这不会有任何帮助。

您可以将此未知类型转换为
数字
,因为
数字
是所有数值类的超类

  def convertToFloat[T](arr: Array[T]): Array[Float] = {
    arr.map(_.asInstanceOf[Number].floatValue())
  }

  def main(args: Array[String]): Unit = {
    println(convertToFloat(Array(1.234456335664756746, 2.324902485349859)).mkString(", "))
    println(convertToFloat(Array(1, 2, 3)).mkString(", "))
  }
输出为:

1.2344563,2.3249025

1.0、2.0、3.0


您可以将此未知类型转换为
Number
,因为
Number
是所有数值类的超类

  def convertToFloat[T](arr: Array[T]): Array[Float] = {
    arr.map(_.asInstanceOf[Number].floatValue())
  }

  def main(args: Array[String]): Unit = {
    println(convertToFloat(Array(1.234456335664756746, 2.324902485349859)).mkString(", "))
    println(convertToFloat(Array(1, 2, 3)).mkString(", "))
  }
输出为:

1.2344563,2.3249025

1.0、2.0、3.0


您可以使用
collect
获取
数组中的值:

data.collect{ case n: Number => n.floatValue }
这将跳过任何非数字值,因此如果要检查这一点,请添加一个
大小写

我还建议使用本机Scala类型,如
List
Vector
,而不是
Array
,后者只是Java数组的包装器,不太适合Scala类型系统


请注意,
Number
是一个相当棘手的问题,因为它是一个Java类型,实际上不在Scala类型层次结构中。如果要避免这种情况,以下方法同样有效:

data.map(_.toString.toFloat)

您可以使用
collect
获取
数组中的值:

data.collect{ case n: Number => n.floatValue }
这将跳过任何非数字值,因此如果要检查这一点,请添加一个
大小写

我还建议使用本机Scala类型,如
List
Vector
,而不是
Array
,后者只是Java数组的包装器,不太适合Scala类型系统


请注意,
Number
是一个相当棘手的问题,因为它是一个Java类型,实际上不在Scala类型层次结构中。如果要避免这种情况,以下方法同样有效:

data.map(_.toString.toFloat)

如何定义
ED
?(它是类型同义词、特征、类等?)正试图从
Double
转换为
Float
?如何定义
ED
?(它是类型同义词、特征、类等?)正试图从
Double
转换为
Float
Number
实际上不是
Int
Float
的超类,但是有足够的自动转换来实现这一点。
Number
实际上不是
Int
Float
的超类,但是有足够的自动转换来实现这一点。