Angular2货币管道更改小数点分隔符
Angular2 Currency Pipe change decimal separator
你好angular朋友,
我正在开发一个 angular2 应用程序(实际上是多个)。我住在荷兰。
目前我正在使用以下格式设置我的货币格式:
{{someIntegerWithCentsToBeDivided / 100 |货币:'EUR':true:'1.0-2'}}
这显示 500 代表 Eurosign 5,501 代表 Eurosign 5.01。
现在我们荷兰人真的很喜欢逗号,所以有谁知道如何更改 . ,?
如果有人知道如何显示 5,则可加分 - 可选(当没有美分时)。
我现在的想法是扩展 CurrencyPipe
你的问题可能前段时间已经解决了,但仅供其他荷兰开发者(比如我)参考:
创建自定义管道:
import {Pipe} from '@angular/core';
@Pipe({
name: 'currencyFormat'
})
export class CurrencyFormat {
transform(value: number,
currencySign: string = '€ ',
decimalLength: number = 2,
chunkDelimiter: string = '.',
decimalDelimiter:string = ',',
chunkLength: number = 3): string {
value /= 100;
let result = '\d(?=(\d{' + chunkLength + '})+' + (decimalLength > 0 ? '\D' : '$') + ')';
let num = value.toFixed(Math.max(0, ~~decimalLength));
return currencySign+(decimalDelimiter ? num.replace('.', decimalDelimiter) : num).replace(new RegExp(result, 'g'), '$&' + chunkDelimiter);
}
}
现在您可以使用:
{{someIntegerWithCentsToBeDivided | currencyFormat}}
管道已包含所有荷兰语默认值,但您可以轻松更改它们或将它们用作模板中的参数。例如:
{{1234567 | currencyFormat:'$':2:' ':'.':3}}
将给出 345.67
作为输出。
我来晚了,但我找到了解决办法。
我只是创建一个管道来替换任何东西:
import { PipeTransform, Injectable, Pipe } from '@angular/core';
@Pipe({
name: 'replace'
})
@Injectable()
export class ReplacePipe implements PipeTransform {
constructor(){}
transform(item: any, replace, replacement): any {
if(item == null) return "";
item = item.replace(replace, replacement);
return item;
}
}
我用了两次来解决你的问题。
{{ 5.01999 | currency:'BRL':true | replace:'.':',' | replace:',00':',-' }}}
你需要导入那个
import { registerLocaleData } from '@angular/common';
import localeIt from '@angular/common/locales/it'
registerLocaleData(localeIt, 'it');
并在视图中添加该管道
{{ 1000 | currency: 'EUR':'symbol':'.2-2':'it' }}
我发现所有这些解决方案都太大了,代码行太多,无法实现这么小的东西。它们的好处是,如果您通过应用程序经常使用它们。对于较小的情况,我个人会使用这种方法:
<div>{{(checkout.delivery_fee | currency).replace('.',',')}}</div>
所以我可以显示如下内容:送货费:$5,50
但是,如果您需要显示大于 1.000 的值,您可以使用:
<div>{{(checkout.delivery_fee | currency).replace(',','x').replace('.',',').replace('x','.')}}</div>
你好angular朋友,
我正在开发一个 angular2 应用程序(实际上是多个)。我住在荷兰。
目前我正在使用以下格式设置我的货币格式:
{{someIntegerWithCentsToBeDivided / 100 |货币:'EUR':true:'1.0-2'}}
这显示 500 代表 Eurosign 5,501 代表 Eurosign 5.01。
现在我们荷兰人真的很喜欢逗号,所以有谁知道如何更改 . ,?
如果有人知道如何显示 5,则可加分 - 可选(当没有美分时)。 我现在的想法是扩展 CurrencyPipe
你的问题可能前段时间已经解决了,但仅供其他荷兰开发者(比如我)参考:
创建自定义管道:
import {Pipe} from '@angular/core';
@Pipe({
name: 'currencyFormat'
})
export class CurrencyFormat {
transform(value: number,
currencySign: string = '€ ',
decimalLength: number = 2,
chunkDelimiter: string = '.',
decimalDelimiter:string = ',',
chunkLength: number = 3): string {
value /= 100;
let result = '\d(?=(\d{' + chunkLength + '})+' + (decimalLength > 0 ? '\D' : '$') + ')';
let num = value.toFixed(Math.max(0, ~~decimalLength));
return currencySign+(decimalDelimiter ? num.replace('.', decimalDelimiter) : num).replace(new RegExp(result, 'g'), '$&' + chunkDelimiter);
}
}
现在您可以使用:
{{someIntegerWithCentsToBeDivided | currencyFormat}}
管道已包含所有荷兰语默认值,但您可以轻松更改它们或将它们用作模板中的参数。例如:
{{1234567 | currencyFormat:'$':2:' ':'.':3}}
将给出 345.67
作为输出。
我来晚了,但我找到了解决办法。
我只是创建一个管道来替换任何东西:
import { PipeTransform, Injectable, Pipe } from '@angular/core';
@Pipe({
name: 'replace'
})
@Injectable()
export class ReplacePipe implements PipeTransform {
constructor(){}
transform(item: any, replace, replacement): any {
if(item == null) return "";
item = item.replace(replace, replacement);
return item;
}
}
我用了两次来解决你的问题。
{{ 5.01999 | currency:'BRL':true | replace:'.':',' | replace:',00':',-' }}}
你需要导入那个
import { registerLocaleData } from '@angular/common';
import localeIt from '@angular/common/locales/it'
registerLocaleData(localeIt, 'it');
并在视图中添加该管道
{{ 1000 | currency: 'EUR':'symbol':'.2-2':'it' }}
我发现所有这些解决方案都太大了,代码行太多,无法实现这么小的东西。它们的好处是,如果您通过应用程序经常使用它们。对于较小的情况,我个人会使用这种方法:
<div>{{(checkout.delivery_fee | currency).replace('.',',')}}</div>
所以我可以显示如下内容:送货费:$5,50
但是,如果您需要显示大于 1.000 的值,您可以使用:
<div>{{(checkout.delivery_fee | currency).replace(',','x').replace('.',',').replace('x','.')}}</div>