パイプを使用して、アイテムの価格をPT-BR通貨形式でフォーマットしようとしています。
ここで私がやろうとしていること:
<div class="desc">{{statement.price | currency:'BRL':true:'1.2-2'}} </div>
私が期待する結果は33.111,00で、現在33,111.00を返しています。
ロケールIDを設定できます。次のようにモジュールをインポートします。
import {LOCALE_ID} from '@angular/core';
そして、モジュールで次のようなプロバイダーを定義します。
providers: [
{
provide: LOCALE_ID,
useValue: "en-US"
}
]
ロケールIDと交換するだけです(IDについては、 Angular documentation を参照してください)。
解決します...
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;
}
}
私にとっては、Marcelo Vieira das Nevesが述べたように、ロケールをインポートした後に機能しました。
import { LOCALE_ID } from '@angular/core';
providers: [{provide: LOCALE_ID, useValue: 'pt-BR'}]
{{item.limite | currency:'BRL':true}}
それを行う:
getFormattedPrice(price: number) {
return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(price);
}
私はこのように解決しました:
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
}
}
}
コードに記載されているように、どのブラウザを使用していますか:
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/].
おそらく、彼らが言及したような別のライブラリを使用するのが最善です。
国に基づいて適応する回避策で解決しました:
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スタイルを使用できませんでした: 'Localency'は、getLocaleCurrencyNameがドキュメントに記載されているものと同じ結果を返さないためです( https://angular.io/api/common/getLocaleCurrencyName ) 「USD」であるが「US Dollar」を返すので、currencySimbol + decimalで回避策を行いました。
たぶんそれは他の誰かを助けることができる