亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

轉到采購/財務計算類型

轉到采購/財務計算類型

Go
斯蒂芬大帝 2021-08-16 19:47:03
我正在用 Go 建立一個在線商店。正如預期的那樣,幾個重要的部分需要記錄準確的貨幣金額。我知道與浮點數相關的舍入問題(即 0.3 不能精確表示等)。貨幣的概念似乎很容易僅表示為字符串。但是,我不確定哪種類型最適合表達實際貨幣金額。關鍵要求似乎是:可以根據貨幣精確表示小數到指定小數位數(某些貨幣使用超過 2 個小數位:http : //www.londonfx.co.uk/ccylist.html)顯然需要基本的算術運算 - add/sub/mul/div。理智的字符串轉換 - 這本質上意味著轉換為十進制等價物。此外,國際化至少需要是可能的,即使所有邏輯都不是內置的(歐洲為 1.000,美國為 1,000)。四舍五入,可能使用替代的四舍五入方案,如銀行家的四舍五入。需要有一個簡單而明顯的方法來對應一個數據庫值——在我的例子中是 MySQL。(在此級別將值視為字符串可能最有意義,以確保它的值被準確保留。)我知道 math/big.Rat 并且它似乎解決了很多這些問題,但例如它的字符串輸出不會按原樣工作,因為它將以“a/b”形式輸出。我確信也有解決方案,但我想知道是否有某種現有的最佳實踐,我不知道(不容易找到)這種事情。更新:這個包看起來很有希望:https : //code.google.com/p/godec/
查看完整描述

1 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

你應該讓 i18n 與你的貨幣實現脫鉤。所以不,不要將所有東西都捆綁在一個結構中并稱它為一天。標記該金額代表什么貨幣,僅此而已。讓 i18n 處理格式、字符串化、前綴等。

使用任意精度的數字類型,如math/big.Rat. 如果這不是一個選項(由于序列化限制或其他障礙),則使用最大的固定大小整數類型,您可以使用您所代表的任何貨幣來表示原子貨幣的數量——美分代表美元,日元代表日元, rappen 表示瑞士法郎,美分表示歐元,等等。

使用第二種方法時要格外小心,不要引起溢出,并為除法定義清晰且有意義的舍入行為。


查看完整回答
反對 回復 2021-08-16
  • 1 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號