目標現狀及問題 目標: 已有的國內項目,需要部署國際化。需要考慮幣種、金額貨幣精度、多語言、匯率、稅等一系列問題。這裡主要說的就是其中金額精度的處理。 現狀: 日常國內項目里,界面輸入的金額是元,然後資料庫存儲以及與其他系統交互都是用的分,也是就固定的貨幣精度繫數100。 問題: 那麼國際化項目後, ...
目標現狀及問題
目標: 已有的國內項目,需要部署國際化。需要考慮幣種、金額貨幣精度、多語言、匯率、稅等一系列問題。這裡主要說的就是其中金額精度的處理。 現狀: 日常國內項目里,界面輸入的金額是元,然後資料庫存儲以及與其他系統交互都是用的分,也是就固定的貨幣精度繫數100。 問題: 那麼國際化項目後,存在不同地方存金額精度不一致問題,同時根據不同幣種存儲和展示精度繫數不一致問題。需提供一個整體解決方案。比如KHR 瑞爾 有的規定最小就是精度為0,那麼頁面填寫100,資料庫存儲也是100。前置
幣種的精度繫數有專門的配置系統里配置好的,直接讀配置獲取繫數即可解決方案
根據以上問題,目前發現三個解決方案方案名 | 描述 | 優缺點 | 改動點 |
全量修改 |
|
優點:需要處理的金額則直接處理,精細度高。
缺點:
|
|
攔截器統一處理 |
|
優點:統一處理
缺點:
|
|
前端修改 |
|
選定方案
經過考慮,使用攔截器統一處理的方案,首先哪個方案都需要梳理哪些地方涉及改動,但是攔截器的方案,後面有優化只需要修改一個地方即可。方案圖例
攔截器統一處理 暫時無法在文檔外展示此內容
具體實現
- 新增一個通用的金額處理方法,根據金額和精度得到最後的數據
註意
- BigDecimal 除以後需要四捨五入或者四舍六入五成雙
- 入參里若是有MultipartFile 等特殊類型需要提前過濾
- 出參統一類返回更好,不然需要多處理一些