java中儲存金額

來源:互聯網
上載者:User

標籤:com   浮點數   使用   規則   mat   boolean   問題   mysq   預設值   

很早之前, 記得一次面試, 面試官問儲存金錢用什麼資料類型? 當時只知道8種資料類型(boolean, byte, short, int, long, float, double, char)的我, 回答了double, 因為我覺得double是雙精確度類型, 最適合, 但是面試官告訴我應該用BigDecimal! 最近在做支付的項目, 才對這種資料類型有了更多的瞭解.

栗子

請看題:

樣本1

問, 結果是多少? 0.01?

No! 結果是0.009999999999999998!

為什麼會這樣呢? 因為float和double都是浮點數, 都有取值範圍, 都有精度範圍. 浮點數與通常使用的小數不同, 使用中, 往往難以確定. 常見的問題是定義了一個浮點數, 經過一系列的計算, 它本來應該等於某個確定值, 但實際上並不是! 金額必須是完全精確的計算, 故不能使用double或者float, 而應該採用java.math.BigDecimal.

加減乘除

兩個BigDecimal值應該怎樣進行加減乘除呢? +, -, *, / 這樣寫嗎? 不!

請看樣本:

樣本2

加減乘除使用了英文的加減乘除, 即add, substract, multiply和divide

大小比較

兩個BigDecimal值怎麼比較大小呢? 能用>或者<嗎? 也不可以!

樣本3

兩個BigDecimal值比較使用compareTo方法, 比較結果有-1, 0, 1, 分別表示小於, 等於, 大於; 對於0, 可以使用BigDecimal.ZERO表示!

小數位元及四捨五入規則

在項目中, 涉及到稅費的計算, 計算的結果可能是小數點後面十幾位, 那麼怎麼進行結算呢? 這就需要四捨五入這種東東了.

樣本4

其中setScale的第一個參數是小數位元, 這個樣本是保留2位小數, 後面是四捨五入規則.

mysql資料庫設計

BigDecimal在進行入庫時, 資料庫選擇decimal類型, 長度可以自訂, 如18; 小數點我們項目中用的是2, 保留2位小數. 此外還要注意的就是預設值, 一定寫成0.00, 不要用預設的NULL, 否則在進行加減排序等操作時, 會帶來轉換的麻煩!

`balance` decimal(18,2) DEFAULT ‘0.00‘ COMMENT ‘賬戶餘額‘,

java中儲存金額

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.