【Scala】Scala之Numbers(二)

简介:  前面已经学习了Scala中的String,接着学习Scala的Numbers。

2.4 替换++、--

  1. 问题描述

  在其他语言中,你可以使用++、--来增1、减1,然而,在Scala中没有++、--操作符

  2. 解决方案

  由于val类型变量是不可变的,所以不能进行加法或减法的操作,但是var类型是可变,可以使用+=、-=方法来进行加法或减法

  10.png

  同理,也可以使用*=、/=方法进行乘法、除法操作

  11.png

  值得注意的是+=、-=、*=、/=都不是操作符,而是方法,他们是var型Int变量上实现的方法。

  3. 讨论

  在其他数字类型上也可以使用+=、-=、*=、/=方法

  12.png

  

2.5 比较浮点数

  1. 问题描述

  你需要比较两个浮点数,但在其他一些编程语言中,它们应该是相等的两个浮点数

  2. 解决方案

  在Java和许多其他语言,你可以通过创建一个指定比较精度的方法来决这个问题,下面是约等于方法  

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

 13.png

  3. 讨论

  当进行浮点数计算时,0.1 + 0.1等于0.2,但是0.1 + 0.2不等于0.3

  14.png

  这种细小的错误使得比较两个浮点数成为真正的问题。

  15.png

  因此,你需要自定义比较精度的函数来比较两个浮点数是否相等,你可以定义隐式转化,然后在需要是引入即可。或者将方法放在object对象中,这样可以直接调用  

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

 然后直接通过MathUtils调用~=方法进行比较 

println(MathUtils.~=(a, b, 0.000001))

2.6 处理大数

  1. 问题描述

  你正在编写需要使用非常大的整数或十进制数的应用程序

  2. 解决方案

  你可以使用BigInt或BigDecimal类

  16.png

  不同于其在Java的对应类,这些类支持所有你使用数字类型的操作符

  17.png

  你也可以把它们转化为其他数字类型

  18.png

  为了避免错误,也可以在转化之前进行测试

  19.png

  3. 讨论

  虽然Scala中的BigInt和BigDecimal是由Java中的BigInt和BigDecimal支持的,但是Scala中的类使用更为简便,并且它们是可变的,可以像其他数字类型一样操作。

  

2.7 生成随机数

  1. 问题描述

  你需要创建随机数,如测试应用程序、执行模拟以及许多其他情况

  2. 解决方案

  使用scala.util.Random来创建随机数

  20.png

  你可以指定随机生成数字的最大值

  21.png

  上述示例将会生成[0-99]之间的数字,你也可以生成随机Float(0.0到1.0之间的浮点数)

  22.png

  也可以生成随机Double(0.0到1.0之间的浮点数)

  23.png

  你也可以在创建Random时指定seed值,也可以之后调用setSeed方法进行设置

  24.png

  3. 讨论

  Random类可以应对所有通常的使用,包括生成数字、设置最大值、设置seed值,也可以生成随机字符

  25.png

  Scala可以生成一段随机长度的数字,在测试时非常有用

  26.png

  也可以生成随机长度的浮点数

  27.png

  

2.8 创建数字范围,列表或数组

  1. 问题描述

  你需要创建一个数字范围、列表或数组,如for循环或用于测试目的

  2. 解决方案

  使用Int类的方法来创建一个数字Range

  28.png

  也可以自定义间距

  29.png

  3. 讨论

  在Scala中可以很轻易的创建数字范围,并且可以很轻易的将其转化为列表或者数组类型

  30.png

  更好的方式如下

  31.png

  

2.9 格式化数字和货币

  1. 问题描述

  你想要格式化数字和货币来控制小数点和逗号,特别是用于打印输出。

  2. 解决方案

  对于简单的数字格式化,可以采用前篇博文提到的f字符串插值

  32.png

  添加逗号的一种简单方法是调用java.text.NumberFormat类的getIntegerInstance方法

  33.png

  在使用getIntegerInstance方法的时候可以指定地区

  34.png

  在处理浮点数时可以使用getInstance方法

  35.png

  对于货币格式,可以使用getCurrencyInstance方法

  36.png

  下面方法可以处理国际化货币

  37.png

  3. 讨论

  主要讨论了使用Java的相关类来格式化数字和货币,也可以使用BigDecimal来处理货币的格式问题。


三、总结


  本篇博文学习了数字类的相关操作,可以看到Scala相比于Java简易很多,与Java也是无缝兼容的。也谢谢各位园友的观看~

目录
相关文章
|
Java Scala
【Scala】Scala之Numbers(一)
 前面已经学习了Scala中的String,接着学习Scala的Numbers。
151 0
【Scala】Scala之Numbers(一)
|
1月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
49 5
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
40 0
|
1月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
84 0
|
1月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
25 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
35 0
|
1月前
|
缓存 分布式计算 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
45 0
|
1月前
|
分布式计算 算法 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
50 0
|
5月前
|
分布式计算 资源调度 Java
Scala+Spark+Hadoop+IDEA实现WordCount单词计数,上传并执行任务(简单实例-下)
Scala+Spark+Hadoop+IDEA实现WordCount单词计数,上传并执行任务(简单实例-下)
59 0