java的double、float类型的比较

发布时间 2023-11-10 16:08:18作者: CodingSh1t

在java中,针对double、float类型的运算和比较都最好不要直接进行,可以依靠BigDecimal来进行

一、比较大小

  • 转换成 long 再比较,(这是long是基本类型,而不是Long对象,对象比较不要用 ==)
Double.doubleToLongBits(0.042421d) ==  Double.doubleToLongBits(0.2342401d)

Double.doubleToLongBits(453.02d) > Double.doubleToLongBits(34.234501d)   

Double.doubleToLongBits(765.07452d) < Double.doubleToLongBits(23432.3034d)
  • 转换成字符串,然后用equals比较 (只能用于比较是不是相等
Float.toString(453.2348f).equals(Float.toString(0.342f))

Double.toString(0.8456d).equals(Float.toString(0.242f))

二、运算

  • 加法:add()函数
  • 减法:subtract()函数
  • 乘法:multiply()函数
  • 除法:divide()函数
  • 绝对值:abs()函数
// 0.5382 * 0.78
new BigDecimal(Float.toString(0.5382f)).multiply(new BigDecimal(Float.toString(0.78f)))
// 错误的方式 new BigDecimal(0.5382f).multiply(new BigDecimal(0.78f))

注意❗:要使用new BigDecimal(Float.toString(0.5382f))而不是new BigDecimal(0.5382f) ,里面先转成字符串,否则还是可能丢精度