我正在尝试在angular 4应用程序中显示数字格式。基本上我正在看的是,如果数字是12.23百万,那么它应该显示为例如 12.2M(小数点后一位)
如果数字是50,000.123那么50.1K
我如何实现角度。我需要写一个指令吗?是否有角度的内置管道?
结构
export interface NpvResults {
captiveInsYear: number[];
captiveInsPremiumPaid: number[];
captiveInsTaxDeduction: number[];
captiveInsLoanToParent: number[];
captiveInsCapitalContribution: number[];
captiveDividentDistribution: number[];
captiveInsTerminalValue: number[];
}
将数组初始化为以下值
this.sourceResults.captiveInsPremiumPaid = [1,2,3,4,5];
html
<td *ngFor= "let item of NpvResults.captiveInsPremiumPaid" >{{item}}</td>
答案 0 :(得分:19)
您可以创建 PIPE
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'thousandSuff'
})
export class ThousandSuffixesPipe implements PipeTransform {
transform(input: any, args?: any): any {
var exp, rounded,
suffixes = ['k', 'M', 'G', 'T', 'P', 'E'];
if (Number.isNaN(input)) {
return null;
}
if (input < 1000) {
return input;
}
exp = Math.floor(Math.log(input) / Math.log(1000));
return (input / Math.pow(1000, exp)).toFixed(args) + suffixes[exp - 1];
}
}
在视图中实现
{{ model | thousandSuff }} <!-- 0 decimals -->
{{ model | thousandSuff : 2 }} <!-- X decimals -->
结果
{{22600000 | thousandSuff}} - &gt; 23M
{{22600000 | thousandSuff:2}} - &gt; 22.60M
答案 1 :(得分:2)
在这里,我只是给你一个想法,先创建
的 HTML 强>
AwsClientBuilder.setRegion(String)
您可以创建自己的{{number | shortNumber}}
,在其中您可以在管道中传递您的号码,然后,您可以执行如下代码,将此逻辑放入您的自定义管道中。
管道过滤器
custom pipe filter
你可以这样做。要创建自定义管道,你可以参考这个网站click here
答案 2 :(得分:0)
最简单的方法是制作管道和服务。您可以使用数字js库在服务中进行实际格式化,然后将该服务导入管道中,并在transform方法中应用格式化。
import { Pipe, PipeTransform } from '@angular/core';
import { NumberFormatService } from '../utils/number-format.service';
@Pipe({
name: 'numberFormat'
})
export class NumberFormatPipe implements PipeTransform {
constructor(private nF: NumberFormatService) {}
transform(value: any, args?: any): any {
if(args == "commas"){
return this.nF.addCommas(value);
}
else if(args == "kmb"){
return this.nF.addKMB(value);
}
return value;
}
}
import { Injectable } from '@angular/core';
import * as numeral from 'numeral';
@Injectable({
providedIn: 'root'
})
export class NumberFormatService {
constructor() { }
public addCommas(val){
return numeral(val).format('0,0');
}
public addKMB(val){
return numeral(val).format('0[.]00a');
}
}
html template file
{{dailyData.avgDaily | numberFormat: 'commas'}}
{{dailyData.avgDaily | numberFormat: 'kmb'}}
答案 3 :(得分:0)
我写了下面的管道,它还将处理所有否定情况(负数,字符串,空白)。 And works best in all of the cases. Complete Article here.
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'numberSuffix'
})
export class NumberSuffixPipe implements PipeTransform {
transform(input: any, args?: any): any {
let exp;
const suffixes = ['K', 'M', 'B', 'T', 'P', 'E'];
const isNagtiveValues = input < 0;
if (Number.isNaN(input) || (input < 1000 && input >= 0) || !this.isNumeric(input) || (input < 0 && input > -1000)) {
if (!!args && this.isNumeric(input) && !(input < 0) && input != 0) {
return input.toFixed(args);
} else {
return input;
}
}
if (!isNagtiveValues) {
exp = Math.floor(Math.log(input) / Math.log(1000));
return (input / Math.pow(1000, exp)).toFixed(args) + suffixes[exp - 1];
} else {
input = input * -1;
exp = Math.floor(Math.log(input) / Math.log(1000));
return (input * -1 / Math.pow(1000, exp)).toFixed(args) + suffixes[exp - 1];
}
}
isNumeric(value): boolean {
if (value < 0) value = value * -1;
if (/^-{0,1}\d+$/.test(value)) {
return true;
} else if (/^\d+\.\d+$/.test(value)) {
return true;
} else {
return false;
}
}
}