javascript - Angular 2+ 管道附加零和逗号

标签 javascript angular

有没有办法通过管道将 3 个零附加到输入的值?

例如,如果用户输入 1,则显示的值为 1,000。

或 99 -> 99,000

我尝试摆弄 Number pipe ,但我无法让它添加正确数量的零,或使用逗号。

使用自定义管道是最好的方法吗?

谢谢

最佳答案

自 Angular 4 以来正确且默认的方式:

<p>{{99 | number:'1.3-3'}}</p>
<!--output '99.000'-->

digitInfo is a string which has a following format: {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}

minIntegerDigits 是要使用的最小整数位数。 默认为 1

minFractionDigits 是小数后的最小位数。 默认为 0

maxFractionDigits 是小数后的最大位数。 默认为 3


从 Angular 5 或 6(不确定)开始,您还可以提供文化

<p>{{99 | number:'1.3-3':CultureType.de_DE}}</p>
<!--output '99,000'-->

要使用不同的文化,请不要忘记导入语言环境。

import { registerLocaleData } from "@angular/common";

import localeDe from '@angular/common/locales/de';
import localeFr from '@angular/common/locales/fr';
import localeNl from '@angular/common/locales/nl';
import localeEnGb from '@angular/common/locales/en-GB';
import localeEnUs from '@angular/common/locales/en';

registerLocaleData(localeDe, CultureType.Development);
registerLocaleData(localeFr, CultureType.fr_FR);
registerLocaleData(localeNl, CultureType.nl_NL);
registerLocaleData(localeEnGb, CultureType.en_GB);
registerLocaleData(localeEnUs, CultureType.en_US);
registerLocaleData(localeDe, CultureType.de_DE);

export class CultureType {
    public static readonly Development: 'xh-ZA' = 'xh-ZA';
    public static readonly de_DE: 'de-DE' = 'de-DE';
    public static readonly nl_NL: 'nl-NL' = 'nl-NL';
    public static readonly fr_FR: 'fr-FR' = 'fr-FR';
    public static readonly en_GB: 'en-GB' = 'en-GB';
    public static readonly en_US: 'en-US' = 'en-US';
}

您想要在函数中使用文化来格式化数字,从 Angular 6 开始这是可能的:

import { formatNumber, getLocaleNumberSymbol, NumberSymbol } from "@angular/common";

/**
 * DigitsInfo:
 * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}
 * 1.2-2 => 1,00
 */
public formatNumber(num: number, digitsInfo: string): string {
    const culture: string = this.languageService.getCulture();
    return formatNumber(num, culture, digitsInfo);
}

您想要再次将字符串解析为数字:

import { formatNumber, getLocaleNumberSymbol, NumberSymbol } from "@angular/common";

public parseStringNumber(str: string): number | null {
    if (!str) {
        return null;
    }

    const culture: string = this.languageService.getCulture();
    const decimalSeparator: string = getLocaleNumberSymbol(culture, NumberSymbol.Decimal);
    const groupSeparator: string = getLocaleNumberSymbol(culture, NumberSymbol.Group);
    const decimalSeparatorRegex = new RegExp('\\' + decimalSeparator, 'g');
    const groupSeparatorRegex = new RegExp('\\' + groupSeparator, 'g');
    const normalizedString = str.replace(groupSeparatorRegex, '').replace(decimalSeparatorRegex, '.');

    return parseFloat(normalizedString);
}

关于javascript - Angular 2+ 管道附加零和逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273430/

相关文章:

Javascript 生成具有等效突出显示的随机颜色

javascript - $ ("a[rel=popover]").popover 不是函数

javascript - 使用带有 and or 的括号会造成混淆

javascript - Jquery 函数未加载 - 未定义不是函数

javascript - 在JS文件中使用组件的成员变量

Angular - 比较字符串

javascript - angular1 中的范围和触发器

html - Angular 4 firebase下拉选择标签选项

javascript - 无法使用 ng-Bootstrap 日期选择器

javascript - 日期组件 Angular 2