11

我正在关注这个:http ://docs.angularjs.org/api/ng.filter:currency 当我在字段中输入 1234.56 时,输出应该是 $1,234.56。但如果我输入输入 1234,那么输出是 $1,234.00。我不希望出现小数点和零。如何才能做到这一点?

4

3 回答 3

17

添加一个新的过滤器:

'use strict';

angular
    .module('myApp')
    .filter('myCurrency', ['$filter', function($filter) {
        return function(input) {
            input = parseFloat(input);
            input = input.toFixed(input % 1 === 0 ? 0 : 2);
            return '$' + input.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
        };
    }]);

在您看来:

<span>{{ '100' | myCurrency }}</span> <!-- Result: $100 -->
<span>{{ '100.05' | myCurrency }}</span> <!-- Result: $100.05 -->
<span>{{ '1000' | myCurrency }}</span> <!-- Result: $1,000 -->
<span>{{ '1000.05' | myCurrency }}</span> <!-- Result: $1,000.05 -->
于 2013-07-16T00:06:27.547 回答
7

我更喜欢这个答案,因为它用逗号分隔数千:

删除 AngularJS 货币过滤器小数/美分

于 2013-11-20T18:45:20.507 回答
5

如果您想要一些快速和肮脏的东西,您可以将第二个参数设置为过滤器,以便在实际上显示美分时触发两位小数:

{{amount | currency:undefined:2*(amount % 1 !== 0)}}

快速警告是,这仅适用于大约 10^14,因为浮点精度的损失会导致amount % 1return 0

另一种语法,它的工作原理几乎相同,但不太容易理解是2*!!(amount % 1)

于 2016-10-26T16:46:57.837 回答