从Int转换为char-> string-> double-> int

时间:2019-12-12 02:38:20

标签: scala

我是Scala的新手,目前正在学习一本“ Learning Scala”书,这是我遇到的问题

” 将数字128转换为char,string,double,然后返回int。您是否希望保留原始金额?您是否需要任何特殊的转换功能? “

我一开始所做的

val number:Int = 128 
val convertNumberToChar = number.toChar
//Whenever I cast it to char , I will receive '?'

我进行了在线研究,但是我对scala还是不熟悉,为什么会收到“?”

我还提供了另一种解决方案来保留值,方法是将数字转换为列表,然后转换为字符串。但是我不确定我做得对吗。请让我发表您的意见。

val number:Int = 128
val convertToChar = number.toList //This will convert a list of char
val convertToString = convertToChar.mkString //This will convert from list to string 
val convertToDouble = convertToString.toDouble //This will convert to Double
val convertToInt = convertToDouble .toInt // This will convert back to int

非常感谢您。 :)

1 个答案:

答案 0 :(得分:3)

128不是可打印字符的值。之所以会得到?,是因为显示屏要向您显示那里有一个Char值,但无法向您显示该值所代表的字符。

由于它是一个字符(即使无法显示),因此可以将其转换为长度为1的String。但是,String不能转换为数字,因为只有数字表示形式(例如"3.56""-79")可以转换为数字。

scala> 128.toChar.toString.toDouble.toInt
java.lang.NumberFormatException: For input string: ""
  at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
  at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
  at java.base/java.lang.Double.parseDouble(Double.java:543)
  at scala.collection.immutable.StringLike.toDouble(StringLike.scala:317)
  at scala.collection.immutable.StringLike.toDouble$(StringLike.scala:317)
  at scala.collection.immutable.StringOps.toDouble(StringOps.scala:29)
  ... 28 elided

scala> 55.toChar.toString.toDouble.toInt
res33: Int = 7

要恢复原始值,必须将其转换为使用其他toString方法的类型。

scala> 128.toChar.toShort.toString.toDouble.toInt
res34: Int = 128