Scala字符串到数值

使用String的to*方法可以讲字符串转换为Scala的数值类型,eg.

    println("100".toInt)
    println("100".toDouble)
    println("100".toFloat)
    println("100".toLong)
    println("100".toShort)

输出如下:

100
100.0
100.0
100
100

需要注意的是,这些方法可能会抛出Java的NumberFormatException,eg.

"eee".toInt

输出:

java.lang.NumberFormatException: For input string: "eee"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at scala.collection.immutable.StringLike.toInt(StringLike.scala:301)
    at scala.collection.immutable.StringLike.toInt$(StringLike.scala:301)
    at scala.collection.immutable.StringOps.toInt(StringOps.scala:29)
    at com.yrz.spark.scala.cookbook.StringToVal$.main(StringToVal.scala:18)
    at com.yrz.spark.scala.cookbook.StringToVal.main(StringToVal.scala)

BigInt和BigDecimal类型的数值也可以通过字符串创建,eg.

    val a = BigInt("123")
    val b = BigDecimal("123")

因为Scala的toInt等字符串转成数值的方法不支持传入进制,可以使用java.lang.IntegerparseInt方法,eg.

    println(Integer.parseInt("1111",2))
    println(Integer.parseInt("11",8))

输出如下:

15
9

也可以用隐式转换,eg.

    implicit class StringToInt(s : String) {
      def toInt(radix : Int) = Integer.parseInt(s, radix)
    }
    println("11".toInt(2))

输出如下:

3

注意:隐式转换会影响当前作用域;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容