我是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
非常感谢您。 :)
答案 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