問題描述
系統(tǒng)設計中痘儡,經(jīng)常會碰到金額的相關問題辕万,金額計算、換算等等沉删,而其中最重要的一點就是精度問題渐尿。如何處理好精度,而不是至于計算錯誤矾瑰,是個比較重要砖茸,也需要小心處理的的問題。
常見處理方式
- 以最小貨幣單位且整型類型來進行存儲
- 能夠試應絕大部分的系統(tǒng)殴穴,處理簡單
- 阿里手冊推薦的強制規(guī)則
- 以Big Decimal進行存儲和處理
- 適配所有系統(tǒng)凉夯,但是處理相對麻煩一點
簡單結論
一定要根據(jù)自己的業(yè)務場景去選擇,如果對自己的業(yè)務場景不熟悉采幌,那么就使用BigDecimal吧恍涂。
舉個栗子
在一些企業(yè)之間的交易中,貨物是按照噸這個計量單位進行交易的植榕,例如一噸1塊錢,然后計價單位卻是按照千克來計價的尼夺,這時候1千克的價錢就是0.001元尊残,而如果按照最小貨幣單位“分”來存儲炒瘸,那么單價就是0,交易價格就會出錯了寝衫,這種場景是不適合的顷扩。
這其中主要是存在了一個計量單位和售賣單位的換算問題,且這個換算公式是不固定的慰毅,可能是10:1隘截,可能是1000:1,也可能是10000:1汹胃。
場景說明
所以說婶芭,如果是系統(tǒng)中不會存在計量單位的換算,如一般的電商系統(tǒng)着饥,計量單位就是售賣單位犀农,這種情況是非常適合用整型的。否則濒募,如果存在計量單位和售賣單位的換算禽最,那么可能就需要考慮Big Decimal了判帮。
一切以系統(tǒng)業(yè)務的正確性為準,而不是以某些技術文檔為準孟害。