我正在Go中構建一家在線商店。如預期的那樣,一些重要的部分需要記錄確切的金額。我知道與浮動相關的四捨五入問題(即0.3不能完全表示等)。購買/財務計算的前往類型
貨幣的概念似乎很容易只是表示爲一個字符串。不過,我不能確定是什麼類型是最合適的表達在實際貨幣金額
的主要要求似乎是:
- 可以準確地表達十進制數下降到指定數量的基於貨幣的小數位數(某些貨幣使用2位小數以下:http://www.londonfx.co.uk/ccylist.html)
- 明顯需要基本的算術運算 - add/sub/mul/div。
- Sane字符串轉換 - 基本上意味着轉換爲它的十進制等值。而且,即使所有的邏輯不是內置的(歐洲爲1,000,美國爲1,000),國際化至少也應該是可能的。
- 舍入,可能使用銀行家舍入等交替舍入方案。
- 需要有一個簡單而明顯的方式來對應數據庫值 - MySQL在我的情況。 (可能最有意義的是把這個值當作一個字符串來處理,以確保它的值完全保留。)
我知道math/big.Rat,它似乎解決了很多這些東西,但例如它的字符串輸出不會按原樣工作,因爲它會以「a/b」形式輸出。我相信也有解決方案,但我想知道是否有某種現有的最佳實踐,我不知道(不容易找到)這種事情。
UPDATE:這個包看起來很有希望:https://code.google.com/p/godec/
快速反應:認爲您確實需要一個'struct'類型,其中包括單位,文化(因爲歐元金額在不同國家以不同方式打印)和金額,可能是一個定點整數(例如,對於美元,美分或美分* 10;存儲的精度可能因國家而異,或者您總是可以使用4位數字來控制舍入誤差)。如果你想控制舍入,我認爲你必須通過方法選擇數學運算(例如,amt.Div(3)而不是amt.Units/= 3)。 – twotwotwo 2014-09-24 04:15:28
存儲它自己有趣的事情;無論貨幣存儲在哪裏,您都可能需要*三個*數據庫列,金額,貨幣和金額在交易時粗略轉換爲客戶的標準貨幣。 – twotwotwo 2014-09-24 04:17:01
我無法快速找到現有模型,但廣泛地說,我認爲您會想要自己實現一些東西,而且它更多[火和動作](http:// www。joelonsoftware.com/articles/fog0000000339.html)比聰明。 – twotwotwo 2014-09-24 04:22:16