2016-07-19 30 views
7

正如你可以閱讀遍佈互聯網using floats to represent currency is a very bad idea。建議的最佳做法是使用代表美分的整數。這樣你就不會遇到任何精度問題,特別是如果你正在做一些計算。使用angulars貨幣過濾器的整數美分

由於我太天真,太過樂觀,我選擇 - 儘管所有警告 - 浮動來代表我的應用程序中的貨幣。起初進行得非常順利。現在我遇到了各種各樣的問題(尤其是比較),並希望從浮點數切換到整數。

不幸的是,角度不支持分數整數作爲貨幣過濾器的輸入(至少據我所知)。我有點驚訝,看起來目前爲止沒有人提出這個問題(在github上沒有相應的問題,沒有任何關於SO等)。

有什麼最佳實踐嗎?你能想到的任何缺點的這樣一個簡單的過濾器可能有:

angular 
    .module('myApp') 
    .filter('cents', ['$filter', function($filter) { 
     return function(cents, symbol, fractionSize) { 
      var asFloat = cents/100; 
      return $filter('currency')(asFloat, symbol, fractionSize); 
     }; 
    }]); 
+0

什麼是您期望的輸入/輸出? – developer033

+0

電流輸入:'(float)5.97'輸出:'5,97€'。 想要的輸入:'(int)597'想要的輸出:'5,97€' –

回答

2

缺點很可能是一樣的道理角不支持在首位耀武揚威分:not all currencies use 100 as their base(掃描下來的「數量基本'欄)。

+0

哇,這是一個非常有趣的事實,我不知道!謝謝。但在我看來,迄今爲止還沒有反對「拋錢」的論點。您指出的問題可以通過引入一個可選變量(默認爲所有基於100種貨幣設置)輕鬆解決。我認爲,使用花車作爲貨幣是個好主意還是壞主意是不值得爭論的。使用美分的好處遠遠超過了另一個變量的缺點。 –

+0

出於好奇:你有鏈接到關於這個話題的實際討論?不幸的是,我還沒有發現爲什麼角度不支持分數整數。 –

+0

不,沒有鏈接。但請注意,貨幣過濾器不接受貨幣符號或任何其他區域設置提示,因此它不知道您的數字值代表什麼貨幣,因此無法對其進行標準化。 我猜這可能值得指出現在可用的標準'Intl.NumberFormat'選項:'新的Intl.NumberFormat(navigator.language,{style:'currency',currency:'EUR'})。format(1234.56)' – searlea

相關問題