【问题标题】:Number pipe either 0 or 2 decimal places数字管道 0 或 2 位小数
【发布时间】:2018-04-03 22:36:38
【问题描述】:

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

【问题讨论】:

    标签: angular angular-pipe


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果事实证明它还没有得到支持,那就这样吧,我会给它更多时间看看其他人是否知道“内置”方式。无论如何感谢您的提示!
    • 我已经编辑了我的帖子,请查看类似主题的链接。
    • 链接链接是不同的问题,如果你看一下文档 XD,这很容易,我想没有比自定义管道更好的方法了
    • 你有没有尝试实现这些管道?
    【解决方案2】:

    为了显示 1 而不是 1.0,你可以试试这个。

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

    【讨论】:

    • 您的建议:1.2 -> 1
    【解决方案3】:

    您可以像这样创建自己的 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 添加到模块的提供者中,以确保您的模板在编写{{ foo | number:'1.0,2' }} 时使用MyDecimalPipe 而不是角度DecimalPipe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多