在开发和金额有关的网站应用时,货币格式化是一个常见的需求。无论是电商网站的商品价格,还是财务系统的金额显示,我们都需要将数值以规范的货币格式呈现给用户。比如,将 1234567.89
格式化为 1,234,567.89
,这样不仅更美观,也更容易阅读。
下面是一个简单而实用的 JavaScript 函数,可以帮助你轻松实现货币格式化。这个函数会将数值修约为两位小数,并添加千位分隔符,确保金额显示的规范性和一致性。
代码实现:
//language:js
// 格式化货币
function formatCurrency(value) {
// 先将数值修约为两位小数
let rounded = Math.round(value * 100) / 100;
// 将数值转换为字符串
let valueString = rounded.toString();
// 检查是否有小数点
let decimalPos = valueString.indexOf('.');
// 如果没有小数点,添加".00"
if (decimalPos === -1) {
valueString += ".00";
} else {
// 否则, 确保小数部分至少有两位数字
let decimalPart = valueString.substring(decimalPos + 1);
if (decimalPart.length === 1) {
// 如果只有一位小数, 添加一个0
valueString += "0";
}
}
// 添加千位分隔符
let parts = valueString.split('.');
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(".");
}
代码解析
- 修约数值:
- 使用
Math.round(value * 100) / 100
将数值修约为两位小数。这样可以确保金额的精度符合货币显示的要求。
- 使用
- 处理小数部分:
- 将数值转换为字符串后,检查是否存在小数点。
- 如果没有小数点,直接添加
.00
,确保金额始终显示两位小数。 - 如果小数点后只有一位数字,则补一个
0
,例如将123.5
转换为123.50
。
- 添加千位分隔符:
- 使用正则表达式
/\B(?=(\d{3})+(?!\d))/g
在整数部分添加千位分隔符(逗号)。 - 例如,将
1234567
转换为1,234,567
。
- 使用正则表达式
- 拼接结果:
- 最后将整数部分和小数部分拼接起来,返回格式化后的字符串。
使用示例:
console.log(formatCurrency(1234567.89)); // 输出: "1,234,567.89"
console.log(formatCurrency(1234.5)); // 输出: "1,234.50"
console.log(formatCurrency(1234)); // 输出: "1,234.00"
注意:
如果你需要更复杂的货币格式化功能(例如支持多国货币、自定义符号等),可以考虑使用现成的库,比如 Intl.NumberFormat,它提供了更强大的国际化支持。