Anagular2 Pipes - 货币缩写

时间:2017-03-28 03:05:13

标签: javascript angularjs angular typescript

在angular2中,我们可以使用管道来格式化数字。例如:

{{selectedTeam.teamSalary | currency: 'USD':true}}

这为我们提供了类似$152,524,668.00

的内容

Angular2管道文档并没有涵盖很多细节,所以我的问题是,有没有办法(使用angular2管道)将数字转换为$ 152,524,668.00到$ 152.5m?

这个问题给了我代码来做,但是寻找更多'Anulgar2特定'的方法(如果存在的话)。

Convert long number into abbreviated string in JavaScript, with a special shortness requirement

1 个答案:

答案 0 :(得分:1)

没有内置管道来做你想做的事情,但正如@Rob建议的那样,你可以很容易地编写自己的管道。

管道只是一个包含transform方法的类,它接受输入并将其转换为其他值。您提到的问题已经概述了您需要进行转换的逻辑,所以说实话,“角度方式”是这样的。只是将该逻辑包装在管道中。

 @Pipe({ name: 'myMoney' })
 export class MyMoneyPipe implements PipeTransform {

   transform(value: number): string {
    var newValue = value;
    if (value >= 1000) {
        var suffixes = ["", "k", "m", "b","t"];
        var suffixNum = Math.floor( (""+value).length/3 );
        var shortValue = '';
        for (var precision = 2; precision >= 1; precision--) {
            shortValue = parseFloat( (suffixNum != 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision));
            var dotLessShortValue = (shortValue + '').replace(/[^a-zA-Z 0-9]+/g,'');
            if (dotLessShortValue.length <= 2) { break; }
        }
        if (shortValue % 1 != 0)  shortNum = shortValue.toFixed(1);
        newValue = shortValue+suffixes[suffixNum];
    }
    return newValue;
   }
 }