scala运算符(2)

52 阅读2分钟

一.scala中的运算符

运算符描述
&按位与运算符
/按位与运算符
按位异或运算符
~按位取反运算符
<<左移运算符
>>右移运算符
>>>无符号右移运算符

二.scala中运算符的优先级

优先级运算符关联性
1() []从左到右
2! ~从右到左
3* / %从左到右
4+ -从左到右
5>> >>> <<从左到右
6> >= < <=从左到右
7== !=从左到右
8&从左到右
9从左到右
10/从左到右
11&&从左到右
12//从左到右
13= += -= *= /= %= >>= <<= &= ^==从右到左
14,从左到右

三.scala的相等性

  1. ==在Scala和java中都是用于判断相等性的一个运算符。但在scala中,==比较的对象只有数值,只要==两边的值相等,就返回true。
  2. eq引用比较

四.scala中的自增和自减运算

在scala中没有++和--这样的自增和自减运算符,可用以下赋值运算符进行代替。

1.++:用赋值运算符+=代替++。

2.--:用赋值运算符代替--。

五.scala中的浮点精度问题

1.何为浮点数精度问题:计算机中所有的数字都是以二进制的形式存在,由于浮点数在转换成二进制数时存在一定的误差,所以这就是导致使用浮点数必然会存在的一个精度问题。(几乎所有的程序语言都存在浮点数精度问题)

2.浮点数精度问题的解决

(1)自定义一定的精度,列如可以指定数据只要满足小数后两位即可,或者将钱数精确到分等。

(2)利用BigDecimal。

```0.1 + 0.2 == 0.3 // false
```println(0.1 + 0.2 == 0.3)  
println(BigDecimal(0.1) + BigDecimal(0.2) == BigDecimal(0.3))

五.大数问题

一种整数都有自己的表达范围,例如Int类型的最大值是2147483647,一旦超过了这个范围就会报错,或者是导致计算异常。

```def main(args: Array[String]): Unit = {

    var a = 2147483647  
var b = 1  
var c = (a + b)/2  
println(c)

  }//1+2147483647 = -2147483648

!另一种计算平均值的方法: a - (a-b)/2

```val a = BigInt("123456789012345678901234567890")

val b = BigInt("987654321098765432109876543210")

println(a + b)

println(a * b)