1. 程式人生 > >Scala程式設計實戰—數值

Scala程式設計實戰—數值

作者:WenWu_Both
出處:http://blog.csdn.net/wenwu_both/article/
版權:本文版權歸作者和CSDN部落格共有
轉載:歡迎轉載,但未經作者同意,必須保留此段宣告;必須在文章中給出原文連結;否則必究法律責任

Scala所有的數值都是物件,包括Bytes、char、Double、Float、 Int、Long和Short。

1.從字串到數值

使用String的to*方法:

"100".toInt
"100".toDouble
"100".toByte

BigInt和BigDecimal也可以通過字串建立:

val a = BigInt("1"
) val b = BigDecimal("3.1415926")

處理基數和根,Scala中的toInt方法不支援傳入進位制,為解決這個問題,可以使用 java.lang.Integer類的parseInt方法:

Integer.parseInt("100",2)
Integer.parseInt("100",8)
Integer.parseInt("100",16)

也可以通過隱式轉換類的方法來解決這個問題:

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

"100"
.toInt(2)

處理NumberFormatException時,通常使用Option/Some/None模式來處理這類問題:

def toInt(s: String): Option[Int] = {
    try{
        Some(s.toInt)
    }catch{
        case e: NumberFormatException => None
        }
}

通過getOrElse方法呼叫:

println(toInt("1").getOrElse(0)) // 1
println(toInt("a").getOrElse(0)) // 0

或者通過模式匹配呼叫:

toInt("a") match{
    case Some(n) => println(n)
    case None => println("Boom!That wasn't a number!")
}

// 返回值
var result = toInt("a") match{
                case Some(n) => n
                case None => 0)
            }

2.數值型別轉換

to*方法

3.替代++和–

Scala中無++、–操作符,可用+=和-=替代。

4.浮點數的比較

val a = 0.3 // 0.3
val b = 0.1 + 0.2 // 0.30000000000000004
a == b // False

解決方法:自定義約等於方法

object MathUtils{
    def ~=(x:Double, y:Double, precision:Double){
        if((x-y).abs < peecision) true else false
    }
}

// 靜態方法呼叫
MathUtils.~=(a, b, 0.000001)

5.生成隨機數

使用Scala的Scala.util.random:

val r = scala.util.random
r.nextInt
r.nextInt(100)
r.nextDouble

6.生成區間數

val a = 1 to 100 // [1, 100]
val a = 1 until 100 // [1, 100)
val a = 1 to 100 by 3  // 3為步長