使用toLocaleString作为负值在括号中显示数字

时间:2019-02-21 18:49:04

标签: javascript angularjs ecma

我一直在尝试根据国家/地区更改AngularJS应用程序中的数字,并使用以下功能在整个应用程序中使用了.toLocaleString函数

numberValueTransformation(value) {
    if (value === 0 || value === undefined) {
      return 0;
    }
    const currencyLocale = this.UserPreferences.getCountryLocale().replace(/fr-FR/g, 'de-DE');
    const currencyCode = this.UserPreferences.getCountryCode();
    return Number(value).toLocaleString(currencyLocale, {
      // style: 'currency',
      currency: currencyCode,
      minimumFractionDigits: 2
    });
}

上面的函数工作得很好,但是我需要在整个应用程序的括号中显示负值。我们是否可以修改.toLocaleString以获得括号中的负值,还是需要手动更改整个应用程序? 我得到的价值是$ 123456689。但是,如果负值我得到-$ 123456789,但在这里我想要的值是($ 123456789)<---方括号代表负号。

2 个答案:

答案 0 :(得分:1)

您可以自己连接支票,而不是直接返回结果。用正数进行转换,如果原始值小于0,则用括号括起来。

var absValue = Math.abs(value);
var returnString = Number(absValue).toLocaleString(currencyLocale, {
    // style: 'currency',
    currency: currencyCode,
    minimumFractionDigits: 2
});

return value < 0 ? '-(' + returnString + ')' : returnString;

答案 1 :(得分:0)

为此,可以查看 numbro.js 库 https://numbrojs.com/ 有一个功能可以根据要求在括号中格式化负值。代码会像这样工作

console.log(
numbro(-123456.78).formatCurrency({
    thousandSeparated: true,
    mantissa: 2,
    negative: "parenthesis" // This does what you want
}))
<script src="https://cdn.jsdelivr.net/npm/numbro@2.3.1/dist/numbro.min.js"></script>
还有许多其他格式选项,请参阅 https://numbrojs.com/format.html#currency