是否可以在不指定区域设置的情况下将数字0,00
格式化为DecimalPipe
?
我有一个要求,不管区域设置如何,都必须格式化数字0,00
或0.00
。
下面的代码抛出错误,说明它不是一个有效的数字
this.decimalPipe.formatNumber('0,00', '.2-2')
我不喜欢这样做来修理它
let num = '0,00';
num = num.replace(',','.')
this.decimalPipe.formatNumber(num, '.2-2')
发布于 2020-04-22 07:29:55
根据对逗号分隔管道的实现的请求,我没有使用字符串替换,而是使用@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);
}
}
在我看来,如果您有一个特定的用例管道,所以您有一个单一的参考点,那么它就更干净了,以防将来需要进行不同的更改。毕竟,如果您想使用字符串替换,只需分配超级调用中的返回值,执行字符串操作并返回值。例如。
let transformed = super.transform(value, digitsInfo, locale);
return `:) ${transformed}`; // using back ticks here
用一个前缀笑脸渲染每个数字。
编辑:在问题中,您似乎只使用了formatNumber()
方法,对于您来说,管道可能不是最好的解决方案,因为管道的优点是它们可以在formatNumber()
中使用。因此,如果您只调用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
函数,而不是重复逻辑。
https://stackoverflow.com/questions/61349551
复制相似问题