DecimalPipe 中的逗号分隔符
Comma Separator in DecimalPipe
是否可以在不指定区域设置的情况下将数字 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')
根据请求实现逗号分隔的管道,而不是进行字符串替换,我使用了@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
函数而不是复制逻辑。
是否可以在不指定区域设置的情况下将数字 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')
根据请求实现逗号分隔的管道,而不是进行字符串替换,我使用了@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
函数而不是复制逻辑。