Scala程式設計實戰—數值
阿新 • • 發佈:2018-12-08
作者: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為步長