java double、float型別的比較

weixin_34320159發表於2018-06-08

在java中,針對double、float型別的運算和比較都最好不要直接進行,可以依靠BigDecimal來進行

一、比較大小
  1. 轉換成 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) 
  1. 轉換成字串,然後用equals比較 (只能用於比較是不是相等)
Float.toString(453.2348f).equals(Float.toString(0.342f))

Double.toString(0.8456d).equals(Float.toString(0.242f))
二、運算
// 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) ,裡面先轉成字串,否則還是可能丟精度

參考:

相關文章