2016-07-19 79 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

相关问题