Scala笔记2:数值

1.从字符串到数值

"100".toInt
"100".toDouble
"100".toFloat
"1".toLong
"1".toShort
"1".toByte

BigIntBigDecimal类型的数值可以通过字符串创建

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.替代++和--

  1. +=
  2. -=
  3. *=
  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.处理大数

  1. BigInt
  2. 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

猜你喜欢

转载自blog.csdn.net/weixin_36926779/article/details/79834438
今日推荐