📜  javascript 货币格式 - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:46.200000             🧑  作者: Mango

JavaScript货币格式 - JavaScript

JavaScript作为一种前端语言,经常需要对货币进行格式化处理。在本文中,我们将介绍如何使用JavaScript对货币进行格式化。

使用内置方法

JavaScript内置了toLocalString()方法,可以将数字转化为本地化字符串。该方法接收三个参数:locales(locale),options和数字格式化字符串。

示例:
var number = 123456.789;
console.log(number.toLocaleString()); 
// 输出 "123,456.789" 在美国地区
console.log(number.toLocaleString('de-DE')); 
// 输出 "123.456,789" 在德国地区
console.log(number.toLocaleString('ar-EG', { style: 'currency', currency: 'EGP' }));
// 输出 "ج.م.‏ ١٢٣٬٤٥٦٫٧٨٩٬٠٠" 在埃及地区
说明:

在示例中,我们将数字格式化为本地货币,可以看到在不同国家的本地字符串格式是不同的。

Markdown代码片段
```javascript
var number = 123456.789;
console.log(number.toLocaleString()); 
// 输出 "123,456.789" 在美国地区
console.log(number.toLocaleString('de-DE')); 
// 输出 "123.456,789" 在德国地区
console.log(number.toLocaleString('ar-EG', { style: 'currency', currency: 'EGP' }));
// 输出 "ج.م.‏ ١٢٣٬٤٥٦٫٧٨٩٬٠٠" 在埃及地区

## 使用第三方库

除了使用JavaScript内置方法外,我们也可以使用第三方库来进行货币格式化。以下是比较流行的三个库:

1. [accounting.js](http://openexchangerates.github.io/accounting.js/)
2. [numeral.js](http://numeraljs.com/)
3. [currency.js](http://openexchangerates.github.io/currency.js/)

这些库都提供了非常便捷的API,可以方便地对货币进行格式化处理。

### 示例:

```javascript
// 使用accounting.js
var number = 123456.789;
console.log(accounting.formatMoney(number)); 
// 输出 "$123,456.79"

// 使用numeral.js
console.log(numeral(number).format('$0,0.00'));
// 输出 "$123,456.79"

// 使用currency.js
console.log(currency(number).format());
// 输出 "$123,456.79"
说明:

在示例中,我们分别使用了三个常用的库进行货币格式化,并且都将数字格式化为美元的货币形式。

Markdown代码片段
```javascript
// 使用accounting.js
var number = 123456.789;
console.log(accounting.formatMoney(number)); 
// 输出 "$123,456.79"

// 使用numeral.js
console.log(numeral(number).format('$0,0.00'));
// 输出 "$123,456.79"

// 使用currency.js
console.log(currency(number).format());
// 输出 "$123,456.79"

## 自定义方法

如果以上方法都不能满足我们的需求,我们也可以编写自己的函数来进行货币格式化。

### 示例:

```javascript
function formatMoney(number, decimalCount = 2, decimal = ".", thousands = ",") {
  decimalCount = Math.abs(decimalCount);
  decimalCount = isNaN(decimalCount) ? 2 : decimalCount;

  const negativeSign = number < 0 ? "-" : "";

  let i = parseInt(number = Math.abs(Number(number) || 0).toFixed(decimalCount)).toString();
  let j = (i.length > 3) ? i.length % 3 : 0;

  return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(number - i).toFixed(decimalCount).slice(2) : "");
};

console.log(formatMoney(123456.789)); 
// 输出 "123,456.79"
说明:

在示例中,我们编写了一个自定义的formatMoney()函数,通过传入数字以及可选的小数位数、小数点、千位分隔符等参数来实现货币格式化。

Markdown代码片段
```javascript
function formatMoney(number, decimalCount = 2, decimal = ".", thousands = ",") {
  decimalCount = Math.abs(decimalCount);
  decimalCount = isNaN(decimalCount) ? 2 : decimalCount;

  const negativeSign = number < 0 ? "-" : "";

  let i = parseInt(number = Math.abs(Number(number) || 0).toFixed(decimalCount)).toString();
  let j = (i.length > 3) ? i.length % 3 : 0;

  return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(number - i).toFixed(decimalCount).slice(2) : "");
};

console.log(formatMoney(123456.789)); 
// 输出 "123,456.79"