JS数字转货币格式,千分位加¥符号就这么几行代码
导读:JS数字转货币格式,千分位加¥符号就这么几行代码数字转成货币格式,核心就三件事:加千分位、保留两位小数、拼上币种符号。89,自动处理了千分位和小数位,不用手写正则。这个正则匹配非数字边界后每三位数字的位置,插个逗号进去,兼容所有现代浏览器,逻辑也一目了然。00,符号必须放最前面。列表页金额列右对齐、表格用等宽数字字体,观感好很多。...
JS数字转货币格式,千分位加¥符号就这么几行代码
前端做电商或后台管理系统,几乎天天要跟金额打交道。后端返回一个 1234567.89,页面上不能直接甩给用户javascript数字转成货币,得变成 ¥1,234,567.89 的样子。javascript 数字转成货币格式,核心就三件事:加千分位、保留两位小数、拼上币种符号。
最省事的方式是用内置方法,一行搞定:
(1234567.89).toLocaleString('zh-CN', { style: 'currency', currency: 'CNY' })
浏览器直接输出 ¥1,234,567.89,自动处理了千分位和小数位,不用手写正则。缺点是不同浏览器对 locale 的表现可能有细微差异JS数字转货币格式,千分位加¥符号就这么几行代码,做跨端或小程序项目时要留意兼容性。

如果项目要求不依赖 locale,手写一个函数更可控:
function fmt(n) {
let s = n.toFixed(2).split('.');
s[0] = s[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return s.join('.');
}
'¥' + fmt(1234567.89) // => "¥1,234,567.89"
这个正则匹配"非数字边界后每三位数字"的位置,插个逗号进去,兼容所有现代浏览器,逻辑也一目了然。
实际项目里还要处理负数和零值。负数要写成 -¥1,234.00 而不是 ¥-1,234.00,符号必须放最前面。列表页金额列右对齐、表格用等宽数字字体,观感好很多。后端若返回的是分为单位的整数(比如 123456 代表 1234.56 元),记得先除以 100 再格式化,别把分当元展示。
你在项目里是直接用 toLocaleString 还是手写正则?有没有踩过金额精度丢失的坑?评论区聊聊。
ZBLOG版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!
