在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) ,里面先转成字符串,否则还是可能丢精度
标签:Float,java,BigDecimal,double,float,toString,doubleToLongBits,Double,new From: https://www.cnblogs.com/CodingSh1t/p/17824350.html