Angular 2格式化货币BRL格式

时间:2016-08-03 19:41:48

标签: angular currency

我试图用管道来格式化PT-BR货币格式的商品价格。

这是我想要做的事情:

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

我期待的结果是33.111,00,现在返回33,111.00。

12 个答案:

答案 0 :(得分:14)

您可以设置locale-id。按如下方式导入模块:

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

在你的模块中定义一个这样的提供者:

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

只需交换您的区域设置ID(对于ID,请参阅Angular documentation)。

答案 1 :(得分:4)

我解决了....

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;
  }

}

答案 2 :(得分:4)

对我而言,在导入语言环境后,它就像Marcelo Vieira das Neves所提到的那样有效。

  1. 在您的模块中导入区域设置:
  2. import { LOCALE_ID } from '@angular/core';

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

    1. 使用货币管道
    2. {{item.limite | currency:'BRL':true}}

答案 3 :(得分:1)

您正在使用哪种浏览器,如代码中所述:

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/].

可能你最好使用他们提到的另一个库。

答案 4 :(得分:1)

我解决了这个问题:

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                                    
        }
    }
}

答案 5 :(得分:1)

那样做:

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

答案 6 :(得分:1)

我通过这种方式解决了

app.module.ts

import { LOCALE_ID } from '@angular/core';
import localePt from '@angular/common/locales/pt';
import {registerLocaleData} from '@angular/common';
registerLocaleData(localePt)

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

.html

currency:'BRL' 

答案 7 :(得分:0)

我解决了一个根据国家/地区进行调整的解决方法:

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);
}

}

无法使用Intl风格:&#39;货币&#39;因为getLocaleCurrencyName不会像文档所说的那样返回(https://angular.io/api/common/getLocaleCurrencyName),应该是&#39; USD&#39;但返回&#39;美元&#39;,所以我用currencySimbol + decimal做了一个解决方法。

也许它可以帮助别人

答案 8 :(得分:0)

Angular7 Works

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

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

transform(value: number, currencyCode: string = 'BRL', symbolDisplay: boolean = true, digits?: string): string {
  if (!value) {
    return '';
  }
  return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 
   currencyCode }).format(value);

  }

}

答案 9 :(得分:0)

我试图使用此管道将我的电话号码格式化为巴西货币

{{p.preco | currency : 'R$' }}

为了正确格式化货币(即12雷亚尔雷亚尔),我不得不在app.module.ts中添加以下行

import {LOCALE_ID} from '@angular/core';
import localePt from '@angular/common/locales/pt';
import {registerLocaleData} from '@angular/common';

registerLocaleData(localePt, 'pt');

@NgModule({
    declarations: [/*...*/],
    imports: [/*...*/],
    providers: [
        {
            provide: LOCALE_ID,
            useValue: 'pt'
        }
    ]
})

直到我添加registerLocaleData调用后,该方法才解决

我正在使用角度8,希望对您有所帮助!

答案 10 :(得分:0)

在 app.module.ts 中

`//add support to pt-BR
import { LOCALE_ID } from '@angular/core';
import { registerLocaleData } from '@angular/common';
import localePt from '@angular/common/locales/pt';
registerLocaleData(localePt);
//add support to pt-BR`


`providers: [ {provide: LOCALE_ID, useValue: "pt-BR" }]//add support to pt-BR`

在页面html {{product.price| currency}}

答案 11 :(得分:0)

在 App.module.ts 中

import { LOCALE_ID } from '@angular/core';// IMPORTANT
import { registerLocaleData } from '@angular/common';// IMPORTANT
import localePt from '@angular/common/locales/pt';// IMPORTANT
registerLocaleData(localePt); // IMPORTANT

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

在你的 component.html

{{price | currency: 'BRL' }}