数字管道:保留0或2位小数。

5
我希望实现数字格式化,如果数字是整数,则不应显示小数点和两个零,否则应该使用仅有的两位小数。例如:
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个回答

4
如果你想在变量上执行多个操作,最好的做法是创建两个不同的管道并将它们结合使用。重要的是从左到右的顺序。如果你只想显示两位数字,可以使用内置的管道,比如decimalPipe:

Angular文档 或者查看这个主题: Stack overflow答案

如果你想显示1而不是1.00,可以创建自定义管道,在其中检查这些字符是否为00或其他内容。如果它是00,则返回没有这些数字的数字。

{btsdaf} - crollywood
{btsdaf} - Adam A
链表是一个不同的问题,而且如果你看一下文档,它还是一个很简单的问题XD,我想没有比自定义管道更好的方法了。 - crollywood
{btsdaf} - Adam A

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() 理解像 '1.0,2' 这样的 digitsInfo

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


0
参考一下.. 应该是 {{x | number:'1.0-2'}}。这样显示的话,根据整数情况会有0、1或2位小数。

2
你没有回答问题。这样无法解决问题。 - Edmunds Folkmanis

0

如果你想显示1而不是1.0,可以尝试这个方法。

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

3
建议为1.2 -> 1 - DerZyklop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接