java double、float型別的比較
在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))
二、運算
// 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)
,裡面先轉成字串,否則還是可能丟精度
參考:
相關文章
- Java Integer型別比較Java型別
- 關於MYSQL中FLOAT和DOUBLE型別的儲存MySql型別
- 【知識積累】比較兩個double型別的大小和integer型別
- BOOL,int,float,指標型別的變數a 與“零”的比較語句指標型別變數
- Java面試官:兄弟,你確定double精度比float低嗎?Java面試
- float和double有什麼區別?
- decimal,float和double的區別是什麼?Decimal
- c語言中%f輸出double型和float型值C語言
- php型別比較表PHP型別
- Oracle date 型別比較和String比較Oracle型別
- C與I型別的比較型別
- 【PL/SQL】IEEE浮點型別BINARY_FLOAT和BINARY_DOUBLESQL型別
- int float double 各型別的最大值最小值型別
- mysql字元型別varchar()比較MySql字元型別
- C# 物件比較(值型別、引用型別)C#物件型別
- 關於Oracle字元型別的比較Oracle字元型別
- 準確詳解:C/C++ float、double資料型別的表示範圍及精度C++資料型別
- 一個比較float是否相等的工具類
- 比較所有的欄位型別型別
- MySQL 的 timestamp 和 datetime 型別比較MySql型別
- 使用帶型別判斷的比較判斷型別
- js中各個型別之間的比較JS型別
- Oracle三種集合資料型別的比較Oracle資料型別
- 保留兩位小數:資料庫欄位型別NUMBER,Java欄位型別Double型別資料庫型別Java
- c++ 基本資料型別(int、float、double、long、long long)最大值,最小是表示方法C++資料型別
- Js比較對Object型別進行排序JSObject型別排序
- jquery判空 string型別的日期比較大小jQuery型別
- 各種時間型別的轉換及比較型別
- Oracle的 資料型別比較及注意事項Oracle資料型別
- XML Schema和XML DTD的資料型別比較XML資料型別
- 開發中遇到的float double精度問題
- PLSQL Language Reference-針對BINARY_FLOAT和BINARY_DOUBLE的額外PL/SQL子型別SQL型別
- 強制型別轉換時的異常處理_java與c++比較型別JavaC++
- Java深海拾遺系列(5)--- 精度計算中的BigDecimal,double和floatJavaDecimal
- J2SE-double 型別相加型別
- Double型別精度問題引起的錯誤型別
- Mysql日期(DATE, TIME, DATETIME, TIMESTAMP)型別的比較MySql型別
- 不同資料型別與零值比較的if從句資料型別