首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DecimalPipe中的逗号分隔符

DecimalPipe中的逗号分隔符
EN

Stack Overflow用户
提问于 2020-04-21 17:32:07
回答 1查看 3.5K关注 0票数 0

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

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

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

代码语言:javascript
运行
复制
this.decimalPipe.formatNumber('0,00', '.2-2')

我不喜欢这样做来修理它

代码语言:javascript
运行
复制
let num = '0,00';

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

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 07:29:55

根据对逗号分隔管道的实现的请求,我没有使用字符串替换,而是使用@Igor的建议并简单地用区域设置实例化,它使用逗号作为十进制分隔符:

代码语言:javascript
运行
复制
@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);
  }

}

在我看来,如果您有一个特定的用例管道,所以您有一个单一的参考点,那么它就更干净了,以防将来需要进行不同的更改。毕竟,如果您想使用字符串替换,只需分配超级调用中的返回值,执行字符串操作并返回值。例如。

代码语言:javascript
运行
复制
let transformed = super.transform(value, digitsInfo, locale);
return `:) ${transformed}`; // using back ticks here

用一个前缀笑脸渲染每个数字。

编辑:在问题中,您似乎只使用了formatNumber()方法,对于您来说,管道可能不是最好的解决方案,因为管道的优点是它们可以在formatNumber()中使用。因此,如果您只调用formatNumber,也可以简单地导出您自己的函数:

代码语言:javascript
运行
复制
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函数,而不是重复逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61349551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档