首页 > 解决方案 > 带 EUR 角管的格式编号

问题描述

我需要以这种方式格式化一个数字:

10,00
1.000,67
1,78

(整数部分可以有未定义的位数,而小数部分必须等于 2)

所以假设做这个html

 <input type="number" class="form-control" [ngModel]="money| toNumber " name="money" required (ngModelChange)="money= $event"

我使用这个管道:

@Pipe({
  name: 'toNumber'
})
export class ToNumberPipe implements PipeTransform {

  transform(value: number | string, locale?: string): string {
    return new Intl.NumberFormat(locale, {
      minimumFractionDigits: 2
    }).format(Number(value));
  }
}

我刚刚在我的代码的另一部分中使用了这个管道,它按照我想要的方式格式化了数字,但是在这种情况下,当我把这个管道放在我的 html 代码中时,输入类型数字字段为空,我收到以下消息:

指定的值“4,00”不是有效数字。该值必须与以下正则表达式匹配:-?(\d+|\d+.\d+|.\d+)([eE][-+]?\d+)?

标签: angularangular6angular-pipe

解决方案


由于您无法使用 将带有分号的字符串解析为数字Number(),因此您可以在此处执行的选项是使用parseInt()而不是Number()

@Pipe({
  name: 'toNumber'
})
export class ToNumberPipe implements PipeTransform {

  transform(value: number | string, locale?: string): string {
    return new Intl.NumberFormat(locale, {
      minimumFractionDigits: 2
    }).format(parseInt(value as string, 10));
  }
}

推荐阅读