浮点数精度与大数处理

37 阅读2分钟

浮点数精度问题

计算机中所有数字都是以二进制的形式存在的,由于浮点数在转换成二进制时存在一定误差,这就导致使用浮点数必然会存在精度问题

浮点数精度问题的解决

  • 自定义一定的精度,如可以指定数据只要满足小数点后两位即可,或者将钱数精确到分等
  • 利用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))
  }
}

屏幕截图 2025-09-17 145749.png

大数处理

无论浮点数还是整数都有一定的取值范围,因此当赋予的值不在该数值类型对应的取值范围内时就会报错,此时将面临大数处理的问题,此时可用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