javascript模板字符串中number默认转为最简字符串(同tostring),需显式调用tofixed、tolocalestring等方法实现精度、位数或本地化格式控制。

JavaScript 中 Number 类型在模板字符串里默认转成最简字符串形式,不带小数、不补零、不加千分位,和 toString() 行为一致;若需控制精度、位数或本地化格式,必须显式调用格式化方法(如 toFixed、toLocaleString)再插入模板中。
默认转换:隐式调用 toString()
模板字符串中的插值(${num})会自动调用 Number.prototype.toString(),结果是“尽可能简洁”的十进制表示:
-
123→"123" -
123.0→"123"(尾部零被省略) -
0.0001→"0.0001" -
1e7→"10000000"(不会保留科学计数法) -
1234567.89→"1234567.89"(无千分位分隔)
需要格式化时:必须手动调用方法
模板字符串本身不做格式化,所有定制需求都依赖 Number 实例方法的返回值:
- 固定小数位:
${price.toFixed(2)}→"19.99" - 有效数字控制:
${num.toPrecision(4)}→"1.235e+3"或"1235"(依数值自动选择格式) - 本地化数字:
${count.toLocaleString('zh-CN')}→"1,234,567" - 货币格式:
${amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })}→"$1,234.56"
常见误区:误以为模板能自动格式化
以下写法达不到预期效果:
-
`Price: ${price.toFixed}`—— 缺少括号调用,输出函数体字符串 -
`${price}.00`—— 把.00当字面量拼接,123变成"123.00",但123.4就变成"123.4.00" -
`${price.toLocaleString()}`—— 虽然可行,但未指定 locale 和 options,行为因浏览器/系统而异,不推荐用于关键显示
推荐写法:清晰、可控、可读
把格式化逻辑封装在插值内部,保持模板干净:
- 金额统一两位小数:
`¥${(total / 100).toFixed(2)}` - 大数加千分位:
`Visits: ${visits.toLocaleString('en-US')}` - 百分比:
`Success rate: ${(rate * 100).toFixed(1)}%` - 兼容 NaN/Infinity:
`Score: ${isNaN(score) ? 'N/A' : score.toFixed(1)}`
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











