web-dev-qa-db-fra.com

Angular 2 format de devise de formatage BRL

J'essaie d'utiliser un tuyau pour formater le prix d'un article au format monétaire PT-BR. 

Voici ce que j'essaie de faire: 

<div class="desc">{{statement.price | currency:'BRL':true:'1.2-2'}} </div>  

Le résultat attendu est 33.111.00 et renvoie 33.111.00. 

8
Clamorious

Vous pouvez définir l'id de locale. Importez le module comme suit:

import {LOCALE_ID} from '@angular/core';

Et dans votre module, définissez un fournisseur comme celui-ci:

providers: [
    {
      provide: LOCALE_ID,
      useValue: "en-US"
    }
]

Échangez simplement votre ID de paramètres régionaux (pour les ID, reportez-vous à la documentation Angular ).

12

Je résous ....

import { Pipe, PipeTransform } from '@angular/core';
import { CurrencyPipe } from '@angular/common';

@Pipe({
  name: 'currencyformat'
})
export class CurrencyFormatPipe implements PipeTransform {

  transform(value: number, currencyCode: string = 'BRL', symbolDisplay: boolean = true, digits?: string): string {
    if (!value) {
      return '';
    }

    let currencyPipe: CurrencyPipe = new CurrencyPipe('pt-BR');
    let newValue: string = currencyPipe.transform(value, currencyCode, symbolDisplay, digits);

    return newValue;
  }

}
4

Pour moi, cela a fonctionné après l'importation de la locale, comme l'a mentionné Marcelo Vieira das Neves.

  1. Importer les paramètres régionaux dans votre module:

import { LOCALE_ID } from '@angular/core';

providers: [{provide: LOCALE_ID, useValue: 'pt-BR'}]

  1. Utilisez le tuyau de monnaie

{{item.limite | currency:'BRL':true}}

4
Fábio Magagnin

j'ai résolu de cette façon:

import { Pipe, PipeTransform } from '@angular/core';
import { CurrencyPipe } from '@angular/common';

@Pipe({
  name: 'currencyFormat'
})
export class CurrencyFormatPipe implements PipeTransform {
    transform(value: number, locale: string, currency_symbol: boolean, number_format: string = '1.2-2'): string {
        if (value) {

            let currencyPipe = new CurrencyPipe();
            let new_value: string;

            new_value = currencyPipe.transform(value, locale, currency_symbol, number_format);
            if (locale = 'BRL') {
                new_value = new_value.replace('.', '|').replace(',', '.').replace('|', ',');
            } 

            return new_value                                    
        }
    }
}
1
Eduardo

Quel navigateur utilisez-vous, comme indiqué dans le code:

WARNING: this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera browsers. For other browsers please use an polyfill, for example: [https://github.com/andyearnshaw/Intl.js/].

Vous feriez probablement mieux d'utiliser une autre bibliothèque comme celle mentionnée.

1
Nilz11

Faire ça:

getFormattedPrice(price: number) {
    return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(price);
}
1
Marcel

J'ai résolu avec une solution de contournement qui s'adapte en fonction du pays:

import { Pipe, PipeTransform, LOCALE_ID, Inject } from '@angular/core';
import { getLocaleCurrencySymbol, getLocaleCurrencyName } from 
'@angular/common';

@pipe({
name: 'currencyGlobal'
})
export class CurrencyGlobalPipe implements PipeTransform {
  constructor(@Inject(LOCALE_ID) public locale: string){
  }

  transform(value: number): any {
    return getLocaleCurrencySymbol(this.locale) + new 
     Intl.NumberFormat(this.locale, { style: 'decimal', minimumFractionDigits: 2 
   }).format(value);
}

}

Impossible d'utiliser le style Intl: 'currency', car getLocaleCurrencyName ne renvoie pas la même chose que ce que la documentation indique ( https://angular.io/api/common/getLocaleCurrencyName ), devrait être 'USD 'but return' US Dollar ', j'ai donc fait une solution de contournement avec currencySimbol + decimal.

Peut-être que cela peut aider quelqu'un d'autre

0
Rodrigo Moreno