DecimalPipe 中的逗号分隔符

Comma Separator in DecimalPipe

是否可以在不指定区域设置的情况下将数字 0,00 格式化为 DecimalPipe

我有一个要求,无论区域设置如何,我都必须格式化数字 0,000.00

下面的代码抛出错误,说它不是一个有效的数字

this.decimalPipe.formatNumber('0,00', '.2-2')

我不喜欢用这种方法来修复它

let num = '0,00';

num = num.replace(',','.')

this.decimalPipe.formatNumber(num, '.2-2')

根据请求实现逗号分隔的管道,而不是进行字符串替换,我使用了@Igor 的建议并简单地用一个语言环境实例化,它使用逗号作为小数点分隔符:

@Pipe({
  name: 'commaDecimal'
})
export class CommaSeparaterDecimalPipe extends DecimalPipe {

  // Use a locale which has a comma separator, don't forget to register it
  transform(value: any, digitsInfo?: string, locale = 'fr'): string | null {
    return super.transform(value, digitsInfo, locale);
  }

}

在我看来,如果您有针对您的用例的特定管道,那么您有一个单一的参考点,以防将来需要进行不同的更改,这样会更简洁。如果您毕竟更愿意使用字符串替换,只需从 super 调用中分配 return 值,进行字符串操作和 return 值。例如。

let transformed = super.transform(value, digitsInfo, locale);
return `:) ${transformed}`; // using back ticks here

用前缀笑脸呈现每个数字。

编辑: 鉴于问题中您似乎只使用 formatNumber() 方法,管道可能不是您认为的最佳解决方案,因为管道的优点是它们可用于 HTML。所以如果你只调用 formatNumber,你也可以简单地导出你自己的函数:

import {formatNumber} from '@angular/common';

export function formatCommaDecimalNumber(value: number, locale = 'en-US', digitsInfo = '.2-2'): string { 
    // No need to instantiate Pipes at least since Angular 8
    let formatted = formatNumber(value, locale, digitsInfo);

    // Handle string replacement
    ...
    return formatted;
}

如果您在 HTML 中也需要此功能,无论如何只需创建自定义管道,但在那里调用您的自定义 formatCommaDecimalNumber 函数而不是复制逻辑。