11

瑞士德语中的数字格式类似于“100'000.00”(不是“100,000.00”)。我该如何改变呢?我尝试将 number_pipe.js 中的设置从 en-US 更改为 de-CH,但没有成功。

var defaultLocale: string = 'de-CH';

有解决方法还是我必须实现自己的管道?

4

4 回答 4

16

If you only need one locale for your app, you can as of now (@angular ~2.4.0) register the locale provider in @NgModule.

@NgModule({
    ...
    providers: [
        {provide: LOCALE_ID, useValue: "de-CH"}
    ]
})
export class AppModule {}

于 2017-03-29T16:28:10.313 回答
3

以下是我的解决方案,它将对某人有所帮助。

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

@Pipe({
  name: 'amountConverter'
})
export class AmountConverterPipe implements PipeTransform {

  transform(value: number | string, locale?: string): string {
    return new Intl.NumberFormat(locale, {
      minimumFractionDigits: 2
    }).format(Number(value));
  }

}

在html中你可以使用如下

 <span class="strong">{{Price  | amountConverter:locale}}</span>

数字格式将根据语言环境的值而改变。

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat了解更多详情。

于 2017-09-15T04:10:42.863 回答
2

尝试使用语言环境编号.pipe.ts

您可以基于 NumeralJs 创建一个简单的管道来格式化数字

https://github.com/adamwdraper/Numeral-js

于 2016-06-07T16:17:47.677 回答
0

对我来说最好的选择是著名的https://www.npmjs.com/package/numeral包。(他使用与 相同的逻辑工作moment.js

安装它:npm i numeral@2.0.6和类型npm i --save-dev @types/numeral@0.0.22

在您的ts文件中,您可以使用如下:

`R$ ${numeral(<your-model-value>).value().toLocaleString()}`

对于 HTML 模板,您可以Pipe像这样创建:

import {Pipe, PipeTransform} from '@angular/core';
import * as numeral from 'numeral';

@Pipe({
  name: 'numberLocale'
})
export class NumberLocalePipe implements PipeTransform {

  transform(value: any, args?: any): any {

    const numeralNumber = numeral(value);

    return numeralNumber.value().toLocaleString();
  }
}

此外,对于货币(和语言环境),一个好的策略是使用HTMLng2-currency-mask中的货币掩码包(但在文件上,您可能应该在保存模型对象之前“翻译”模型中的绑定值。tsnumeral

ng2-currency-mask在 HTML 模板上使用:

<input [(ngModel)]="model.value"
   [options]="{ prefix: 'R$ ', thousands: '.', decimal: ',' }"
   allowNegative="false" currencyMask>

保存模型ts之前打开:

if(this.model.value)
   this.model.value = numeral(this.model.value).value();

https://github.com/cesarrew/ng2-currency-mask

于 2017-09-24T15:11:12.610 回答