浮点数精度问题
计算机中所有数字都是以二进制的形式存在的,由于浮点数在转换成二进制时存在一定误差,这就导致使用浮点数必然会存在精度问题
浮点数精度问题的解决
- 自定义一定的精度,如可以指定数据只要满足小数点后两位即可,或者将钱数精确到分等
- 利用BigDecimal,java和scala中都有BigDecimal对象,利用它能够准确的解决浮点数精度的问题
object zsh0 {
def main(args: Array[String]): Unit = {
val a = 0.1
val b = 0.2
val c = 0.3
println(a + b == c)
//BigDecimal:处理浮点数的精度问题
println(BigDecimal(a) + BigDecimal(b) == BigDecimal(c))
}
}
大数处理
无论浮点数还是整数都有一定的取值范围,因此当赋予的值不在该数值类型对应的取值范围内时就会报错,此时将面临大数处理的问题,此时可用BigInt与BigDecimal来解决
var a =2147483647
var b =1
println(a+b)
var c =(a+b)/2 //
var c =a - (a-b)/2 //
println(c)
val a1 =BigInt("123456789012345678901234567890")
val b1 =BigInt("987654321098765432109876543210")
println(a1 + b1)
println(a1 * b1)
-2147483648
-1073741824
1073741824
1111111110111111111011111111100
121932631137021795226185032733622923332237463801111263526900