数字管道 0 或 2 位小数

Number pipe either 0 or 2 decimal places

我想实现数字格式,如果数字是圆的,则不应有小数占位符 .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-s 实现同样的效果,但如果可能的话我想避免。

如果你想对你的变量做不止一件事,最好的做法是创建两个不同的管道并将它们一起使用。重要的是从左到右的顺序。如果你只想显示两位数字,你可以使用内置管道,如 deicmalPipe:

Angular Doc 或者只是检查该主题:

如果您想显示 1 而不是 1.00,您可以创建自定义管道,它会在其中检查字符是 00 还是其他。如果它是 00,它 return 没有这些数字的数字。

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

{{x | number:'1.0-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;
    }
}

如果你有这个你可以

  • 向 transform() 方法添加一个 removeTrailingZeros? : boolean

  • 让 transform() 理解 digitsInfo 就像 '1.0,2'

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