📅  最后修改于: 2023-12-03 15:31:46.200000             🧑  作者: Mango
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' }));
// 输出 "ج.م. ١٢٣٬٤٥٦٫٧٨٩٬٠٠" 在埃及地区
在示例中,我们将数字格式化为本地货币,可以看到在不同国家的本地字符串格式是不同的。
```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"
在示例中,我们分别使用了三个常用的库进行货币格式化,并且都将数字格式化为美元的货币形式。
```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()函数,通过传入数字以及可选的小数位数、小数点、千位分隔符等参数来实现货币格式化。
```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"