在 JavaScript 中,toLocaleString() 是最常用、也最规范的数字格式化方式之一,特别适合做金额、千分位、小数位、本地化展示。下面系统讲清楚它的用法与常见问题。
一、最基础用法(千分位分隔)
const num = 1234567.89;
num.toLocaleString();
// 在中文/英文环境下一般输出:1,234,567.89
它会:
-
自动加 千分位分隔符
-
根据 浏览器/系统语言环境决定格式
二、指定语言(Locale)
num.toLocaleString('en-US'); // 1,234,567.89
num.toLocaleString('zh-CN'); // 1,234,567.89
num.toLocaleString('de-DE'); // 1.234.567,89
不同地区的区别:
-
en-US:,千分位,.小数点 -
de-DE:.千分位,,小数点 -
fr-FR:空格作千分位
三、控制小数位数(最常用)
1. 固定保留 2 位小数
num.toLocaleString('zh-CN', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
// 1,234,567.89
2. 不足补 0
(12).toLocaleString('zh-CN', {
minimumFractionDigits: 2
});
// 12.00
3. 最多保留 2 位(不强制)
(12.3456).toLocaleString('zh-CN', {
maximumFractionDigits: 2
});
// 12.35
四、金额 / 货币格式化(强烈推荐)
const money = 123456.78;
money.toLocaleString('zh-CN', {
style: 'currency',
currency: 'CNY'
});
// ¥123,456.78
money.toLocaleString('en-US', {
style: 'currency',
currency: 'USD'
});
// $123,456.78
常见币种:
-
CNY人民币 -
USD美元 -
EUR欧元 -
JPY日元(默认无小数)
五、百分比格式化
const rate = 0.1234;
rate.toLocaleString('zh-CN', {
style: 'percent',
maximumFractionDigits: 2
});
// 12.34%
注意:传入的是小数,不是 12.34
六、去掉千分位(少见但有用)
num.toLocaleString('zh-CN', {
useGrouping: false
});
// 1234567.89
七、与 toFixed() 的区别(很重要)
| 方法 | 是否千分位 | 本地化 | 返回类型 |
|---|---|---|---|
toFixed() | ❌ | ❌ | string |
toLocaleString() | ✅ | ✅ | string |
(1234.5).toFixed(2); // "1234.50"
(1234.5).toLocaleString(); // "1,234.5"
展示给用户:用 toLocaleString()
计算或接口传值:用 Number / toFixed
八、实际项目封装示例(前端常用)
function formatNumber(
value,
locale = 'zh-CN',
fraction = 2
) {
return Number(value).toLocaleString(locale, {
minimumFractionDigits: fraction,
maximumFractionDigits: fraction
});
}
formatNumber(123456.7);
// 123,456.70
九、常见问题总结
1. 返回值是字符串
typeof num.toLocaleString(); // "string"
2. 不能用于精确计算(浮点误差仍存在)
3. Node.js 旧版本 locale 支持不完整
浏览器环境一般没问题
十、一句话总结
toLocaleString()是前端数字展示的首选方案,特别适合金额、统计数据、国际化场景。
717

被折叠的 条评论
为什么被折叠?



