Формат номера с EUR угловой трубой - PullRequest
0 голосов
/ 23 октября 2018

Мне нужно отформатировать число следующим образом:

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 +)?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы должны использовать Angular CurrencyPipe и переопределить французский дисплей.Вы можете сделать это следующим образом: https://devblog.dymel.pl/2016/09/22/how-to-extend-angular2-pipe/
Тогда все, что вам нужно сделать, это заменить пробелы на точки:)

0 голосов
/ 23 октября 2018

, поскольку вы не можете разобрать строку с точкой с запятой в число, используя 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));
  }
}
...