js数字转货币型,toLocaleString和toFixed怎么写最规范
做电商、做后台报表,金额展示是绕不开的需求。把一串数字变成"¥1,234.56"这种货币型格式,前端常用的手段无非 toLocaleString、toFixed 和正则模板三种js将数字格式设置为货币型,各有各的适用场景,选对了能省不少事。
toLocaleString 是浏览器原生方法,传第二个参数指定 currency 就能直接输出货币字符串:(1234.5).toLocaleString('zh-CN', { style: 'currency', currency: 'CNY' }),出来就是"¥1,234.50"。好处是自动处理小数位数、千分位、货币符号,且跟随用户系统语言环境,做多语言站点时基本不用额外写格式化逻辑。

如果项目里只用人民币、不需要国际化,用 toFixed 手动拼更轻量:'¥' + (num / 100).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',')。后端传来的是分,除 100 转成元,toFixed(2) 保证两位小数,正则加千分位,三步搞定,零依赖,塞进工具函数里全局复用。
有些场景需要完全自定义js数字转货币型,toLocaleString和toFixed怎么写最规范,比如货币符号放右边、小数位不固定、或者要加"万/亿"缩写。这时候用 Intl.NumberFormat 配合 notation 参数最灵活:new Intl.NumberFormat('zh-CN', { notation: 'compact' }).format(12345678) 能输出"1235万",再手动拼上符号就齐活了。
你在项目里格式化金额时,后端是直接传元还是传分?有没有碰到过 toLocaleString 在不同浏览器下输出不一致的坑?评论区聊聊。