Mik*_*ras 64 formatting filter angularjs angularjs-filter
有没有办法从货币过滤器的输出中删除小数/美分?我正在做这样的事情:
<div>{{Price | currency}}</div>
Run Code Online (Sandbox Code Playgroud)
哪个输出:
$ 1,000.00
相反,我想:
$ 1,000个
可以使用货币过滤器完成吗?我知道我可以在数字上加一个美元符号,我可以编写自己的过滤器,但我希望现有的货币过滤器存在一个简单的方法.
谢谢.
Liv*_* T. 115
更新:从版本1.3.0开始 - currencyFilter:将fractionSize添加为可选参数,请参阅commit 和updated plunker
{{10 | currency:undefined:0}}
Run Code Online (Sandbox Code Playgroud)
请注意,它是第二个参数,因此您需要传入undefined以使用当前的区域设置货币符号
更新:请注意,这仅适用于数字前显示的货币符号.从版本1.2.9开始,它仍然硬编码为2位小数.
这是一个修改后的版本,它使用angular的formatNumber副本来启用0 fractionSize作为货币.
通常,这应该可以在locale定义或currencyFilter调用中进行配置,但是现在(1.0.4)它可以硬编码到2个小数位.
自订过滤器:
myModule.filter('noFractionCurrency',
[ '$filter', '$locale',
function(filter, locale) {
var currencyFilter = filter('currency');
var formats = locale.NUMBER_FORMATS;
return function(amount, currencySymbol) {
var value = currencyFilter(amount, currencySymbol);
var sep = value.indexOf(formats.DECIMAL_SEP);
if(amount >= 0) {
return value.substring(0, sep);
}
return value.substring(0, sep) + ')';
};
} ]);
Run Code Online (Sandbox Code Playgroud)
模板:
<div>{{Price | noFractionCurrency}}</div>
Run Code Online (Sandbox Code Playgroud)
例:
更新:修复处理负值时的错误
Tom*_*Tom 32
这个问题似乎相当陈旧,给出的答案很好.但是,还有另一种替代解决方案也可以提供帮助(我在我的项目中使用).
这与货币符号前缀以及正值和负值的后缀相符合.
自订过滤器:
angular.module('your-module', [])
.filter('nfcurrency', [ '$filter', '$locale', function ($filter, $locale) {
var currency = $filter('currency'), formats = $locale.NUMBER_FORMATS;
return function (amount, symbol) {
var value = currency(amount, symbol);
return value.replace(new RegExp('\\' + formats.DECIMAL_SEP + '\\d{2}'), '')
}
}])
Run Code Online (Sandbox Code Playgroud)
模板:
<div>{{yourPrice| nfcurrency}}</div>
Run Code Online (Sandbox Code Playgroud)
不同语言环境的示例:
更新
请注意,此解决方法适用于AngularJS 1.2及更早版本的库.从AngularJS 1.3开始,您可以使用货币格式化程序,第三个参数指定分数大小 - "将金额四舍五入的小数位数".
请注意,为了使用来自AngularJS本地化的默认货币格式,您必须使用设置为的货币符号(第二个参数)undefined(null或为空不起作用).美元和丹麦克朗的演示示例.
小智 31
另一件值得考虑的事情是,如果你知道你只有一种语言环境或一种货币,你可以将货币符号放在数字之前,然后像这样使用数字过滤器(对于美国货币).
${{Price | number:0}}
Run Code Online (Sandbox Code Playgroud)
如果您不想使用新过滤器并且只有一种货币,那么可以使用更多快速解决方案.
Ali*_*avi 18
现在已经晚了但可能会帮助一些人
{{value | currency : 'Your Symbol' : decimal points}}
Run Code Online (Sandbox Code Playgroud)
那么让我们看看输出的一些例子
{{10000 | currency : "" : 0}} // 10,000
{{10000 | currency : '$' : 0}} // $10,000
{{10000 | currency : '$' : 2}} // $10,000.00
{{10000 | currency : 'Rs.' : 2}} // Rs.10,000.00
{{10000 | currency : 'USD $' : 2}} // USD $10,000.00
{{10000 | currency : '#' : 3}} // #10,000.000
{{10000 | currency : 'ANYTHING: ' : 5}} // ANYTHING: 10,000.00000
Run Code Online (Sandbox Code Playgroud)
看演示
这是另一个类似的解决方案,但它删除.00十进制,但留下任何其他小数.
10.00美元到10美元
10.20美元至10.20美元
app.filter('noFractionCurrency', [ '$filter', '$locale', function(filter, locale) {
var currencyFilter = filter('currency');
var formats = locale.NUMBER_FORMATS;
return function(amount, currencySymbol) {
amount = amount ? (amount*1).toFixed(2) : 0.00;
var value = currencyFilter(amount, currencySymbol);
// split into parts
var parts = value.split(formats.DECIMAL_SEP);
var dollar = parts[0];
var cents = parts[1] || '00';
cents = cents.substring(0,2)=='00' ? cents.substring(2) : '.'+cents; // remove "00" cent amount
return dollar + cents;
};
}]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76092 次 |
| 最近记录: |