0、前言
項目中,基本上都會涉及到金錢;那么金錢用什么數據類型存儲呢?
不少新人都會認為用double,因為它是雙精度類型啊,或者float,
其實,float和double都是不能用來表示精確的類型的,也就是說金錢是萬萬不能用float和double來存儲的!
1、why?
先來個例子:
你猜猜輸出是什么,0.01?NO,請看:
為什么會這樣呢?
因為float和double都是浮點數, 都有取值范圍, 都有精度范圍. 浮點數與通常使用的小數不同, 使用中, 往往難以確定.
常見的問題是定義了一個浮點數, 經過一系列的計算, 它本來應該等於某個確定值, 但實際上並不是!
所以說,float和double都是不能用來表示精確的類型的;
金額必須是完全精確的計算, 故不能使用double或者float, 而應該采用java.math.BigDecimal.
2、結論
float和double都是不能用來表示精確的類型的,也就是說金錢是萬萬不能用float和double來存儲的!
金錢應該采用java.math.BigDecimal存儲;
MYSQL數據庫選擇decimal類型,注意默認值 一定寫成0.00, 不要用默認的NULL, 否則在進行加減排序等操作時, 會帶來轉換的麻煩!
3、BigDecimal的常用方法