Scala编程实战——第二章 数值

Scala所有的数值都是对象,包括Byte、Char、Double、Float、Int、Long和Short,与被称为"非数值类型"的Unit和Boolean一样,这些数值类型都继承扩展自AnyVal特质(trait)
内奸数值类型的数值范围:

  • Char :16位无符号Unicode字符
  • Byte :8位有符号整数
  • Short :16位有符号整数
  • Int :32位有符号整数
  • Long :64位有符号整数
  • Float :32位IEEE 754单精度浮点数
  • Double :64位IEEE 754双精度浮点数

Boolean型
复数:
Scala自带的math库,或者了解Spire和ScalaLab
日期类型:
nscala-time对Java的Joda Time进行了封装

2.1从字符串到数值

  • s1.toInt / s1.toDouble ····
    如果字符串s1不是阿拉伯数字型字符,那么会抛出异常
  • Integer.parseInt(“num”,n进制)
    可以返回一个n进制的num
  • 创建隐式转换类和方法
implicit class StringToInt(s:String) {
	def toInt(radix: Int) = Integer.parseInt(s,radix)
}

2.2数值类型转换

  • num.to[Type]
    Type:基本数据类型

2.3重载默认数值类型

  • val a = 1d / val a = 1f / val a = 100L
    分别对应类型Double、Float、Long
  • 给变量增加类型声明
    val a = 0: [Type] 或
    val a [Type] = 0
val a = 0: Byte
val a = 0: Int
val a: Double = 0
val a: Float = 0
  • 进制前缀
    十六进制保存
val a = 0x20

2.4替代++和- -

即Scala中不存在++ , - -这种运算符或者语句

  • 用+=1,-=1替代++和- -
    其实这里所有的算数运算符,+=,-=,*=和/=都不是操作符而是方法。这种把功能实现为方法而非操作符的方式是Scala里的一贯的模式,在Scala里,函数(方法)是"一等公民"

2.5浮点数的比较

由于浮点数的运算会产生误差,比如:0.1+0.3可能等于0.400000000003
这就会导致当a = 0.1, b = 0.3 ,c = a + b,判断 a + b == c的结果会是false,为了消除这种误差,可以自定义隐式方法(在工具对象上或者包对象中)

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

然后使用这个对象中的这个方法来进行判断

println(MathUtils.~=(a+b,c,0.00001))

2.6处理大数

  • BigInt()类
    参阅:Java的BigInteger类,Scala的BigInt类和BigDecimal类

2.7生成随机数

  • scala.util.Random类
scala> val r = scala.util.Random
r: util.Random.type = scala.util.Random$@5a14e60d

scala> r.nextInt
res0: Int = 1856103164

scala> r.nextInt(100)  //选取范围在(0,99)之间
res1: Int = 51

scala> r.nextDouble
res2: Double = 0.6855927466475535

详情参阅Random类

2.8创建一个数值区间、列表或者数组

  • a1 to a2
    a1要小于a2,生成一个Range(a1,·····,a2) 默认步长为1
  • a1 to a2 by 步长
  • a1 until a2
    不包含a2
  • (a1 to a2).to[CollectionType]
    会将本来一个Range型的容器转换成CollectionType的,例如List,Array,Tuple等

2.9格式化数值和金额

  • 1.4节所描述的内容解释f字符串
  • “xxx占位符xx”.format(param)
    具体参考上网搜索或者参考相关资料
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值