数字管道0或2位小数

时间:2017-10-23 11:34:37

标签: angular angular-pipe

我希望实现数字格式化,这样如果数字是圆的,则应该没有小数占位符.00,否则使用2并且只有2个小数位。例如:

1.23    -> 1.23
1.23456 -> 1.24
1.2     -> 1.20
1.0     -> 1
1       -> 1

根据文档,您只能指定小数位数范围(例如|number:'.0-2')而不是特定选择(例如|number:'.0,2');我是对的还是有办法?

我知道我可以通过一些*ngIf来实现同样的目标,但如果可能的话,我希望避免这样做。

4 个答案:

答案 0 :(得分:1)

如果您想对变量执行多项操作,最佳做法是创建两个不同的管道并将它们一起使用。重要的是从左到右的顺序。如果您只想显示两位数字,可以使用内置管道,如deicmalPipe:

Angular Doc 或者只检查该主题:     Stack overflow answer

如果要显示1而不是1.00,可以创建自定义管道,检查字符是00还是其他字符。如果是00则返回没有这些数字的数字。

答案 1 :(得分:1)

要显示1而不是1.0,您可以试试这个。

{{x | number:'1.0-0'}}

答案 2 :(得分:0)

使用:

{{ number | number : '1.2-2'}}

https://angular.io/api/common/DecimalPipe

答案 3 :(得分:0)

您可以这样创建自己的DecimalPipe:

@Pipe({ name: 'number' })

export class MyCurrencyPipe implements PipeTransform {
constructor(
    private decimalPipe : DecimalPipe,
) {
}

transform(value: any, digitsInfo?: string, locale?: string): string | null {
    let result;
    result = this.decimalPipe.transform(value, digitsInfo, locale);

     // …do something with your result

    return result;
    }
}

如果可以的话

  • removeTrailingZeros? : boolean添加到transform()方法中。

  • 使transform()理解digitsInfo之类的'1.0,2'

也不要忘记在模块的提供程序中添加MyDecimalPipe,以确保模板在编写MyDecimalPipe时使用DecimalPipe而不是角度{{ foo | number:'1.0,2' }}