在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
答案 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;
}
}