1.从字符串到数值
"100".toInt
"100".toDouble
"100".toFloat
"1".toLong
"1".toShort
"1".toByte
BigInt
和BigDecimal
类型的数值可以通过字符串创建
val b = BigInt("1")
val b = BigDecimal("3.14")
处理基数和根:使用java.lang.Integer
类的parseInt
方法处理十进制以外的计算
Integer.parseInt("1",2)
Integer.parseInt("10",2)
Integer.parseInt("10",8)
1
2
8
或者创建一个隐式转换:
implicit class StringToInt(s:String){
def toInt(radix:Int)=Integer.parseInt(s,radix)
}
"10".toInt
结果输出:
2
scala处理受检异常
def toInt(s:String):Option[Int]={
try{
Some(s.toInt)
}catch{
case e:NumberFormatException=>None
}
}
toInt("12").getOrElse(0)
toInt("a").getOrElse(0)
toInt("a").getOrElse(-1)
结果输出:
12
0
-1
2.数值类型转换
19.2.toInt
19.toDouble
19
19.0
想要避免类型转换可能出现的错误,可以使用相应的isValid
方法确认是否可以进行类型转换
val a = 1000
a.isValidByte
a.isValidShort
false
true
3.重载默认数据类型
对数值变量赋值时避免默认类型的方法:
val a = 1d
val a = 1f
val a = 1L
结果输出:
Double:1
Float:1
Long:1
另一种方法声明类型
val a:Double = 1
a:Doubel = 1.0
通过增加前导0x
定义十六进制的值
val a = 0x20
val a = 0x20L
Int = 32
Long = 32
4.替代++和--
+=
-=
*=
/=
5.浮点数的比较
“近似相等”
def ~=(x:Double,y:Double,precision:Double)={
if((x-y).abs<precision) true
else false
}
val a = 0.3
val b = 0.1+0.2
a==b
~=(a,b,0.0001)
false
true
6.处理大数
BigInt
BigDecimal
支持所有普通数值类型的操作符(加减乘除)
检查各类型的最大值
Byte.MaxValue
Double.PositiveInfinity
7.生成随机数
import scala.util.Random
val a = Random
a.nextInt
a.nextFloat
a.nextInt(10)
8.创建一个数值区间、列表或数组
val r = 1 to 10
Range(1,2,3,4,5,6,7,8,9,10)
val r = 1 to 10 by 2
Range(1,3,5,7,9)
for(i <- 1 until 5) println(i)
1
2
3
4
for(i <- 1 to 5) println(i)
1
2
3
4
5
将区间转换成数组或者列表
val x = (1 to 10).toArray
val x = (1 to 10).toList
生成随机长度的区间
var range = 0 to scala.util.Random.nextInt(10)
9.格式化数值和金额
val pi = scala.math.Pi
f"$pi%1.5f"
f"$pi%06.2f"
"$%1.5f".format(pi)
3.14159
003.14
3.14159
数值中加逗号的方法
val formatter = java.text.NumberFormat.getIntegerInstance
formatter.format(100000)
100,000
可以通过getInstance
方法获取一个formatter来处理浮点数
val formatter = java.text.NumberFormat.getInstance
formatter.format(10000.33)
10,000.33
对于金额的输出可以使用getCurrencyInstance
方法
val formatter = java.text.NumberFormat.getCurrencyInstance
formatter.format(123.2)
¥123.2