点晴MIS系统工作流模板中控件支持加载JavaScript脚本来处理需要显示的结果。
在 JavaScript 中,实现数值的千位符(每三位加逗号)显示有多种方法,以下汇总五种常用方案并附代码示例,可根据需求选择:
📌 一、推荐方案:toLocaleString()(原生简洁,支持国际化)
适用场景:快速实现基础格式化,兼容现代浏览器。
代码示例:
function formatNumber(num) {
return num.toLocaleString('en-US'); // 强制美式格式(逗号分隔)
}
console.log(formatNumber(1234567.89)); // 输出: "1,234,567.89"
特点:
- 自动处理小数(默认保留三位小数,四舍五入)。
- 支持本地化配置(如
'de-DE' 使用点作为千分位)。
🔍 二、正则表达式(灵活控制整数部分)
适用场景:需精确控制格式或兼容旧环境。
代码示例:
function formatNumber(num) {
// 处理整数部分,忽略小数
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
console.log(formatNumber(1234567.89)); // 输出: "1,234,567.89"
优化版(支持小数和边界校验):
function formatNumber(num) {
if (isNaN(num)) return "0";
const [integer, decimal] = parseFloat(num).toFixed(2).split('.');
const formattedInt = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return decimal === "00" ? formattedInt : `${formattedInt}.${decimal}`;
}
🌐 三、Intl.NumberFormat(高级国际化控制)
适用场景:需配置小数位数、货币符号等复杂格式。
代码示例:
function formatNumber(num, decimals = 2) {
return new Intl.NumberFormat('en-US', {
minimumFractionDigits: decimals,
maximumFractionDigits: decimals
}).format(num);
}
console.log(formatNumber(1234567.89123, 3)); // 输出: "1,234,567.891"
特点:
- 可定制小数位数、货币单位等。
- 性能优于正则(推荐高频使用场景)。
🧩 四、手动遍历字符串(兼容性最佳)
适用场景:兼容老旧环境(如低版本浏览器)。
代码示例:
function formatNumber(num) {
let [integer, decimal] = String(num).split('.');
let result = '';
for (let i = integer.length - 1, count = 0; i >= 0; i--) {
result = integer[i] + result;
count++;
if (count % 3 === 0 && i !== 0) result = ',' + result;
}
return decimal ? `${result}.${decimal}` : result;
}
console.log(formatNumber(1234567)); // 输出: "1,234,567"
📦 五、第三方库(如 numeral.js)
适用场景:项目已使用库或需复杂格式(货币/百分比)。
代码示例:
// 需先引入 numeral.js
const formatted = numeral(1234567.89).format('0,0.00');
console.log(formatted); // 输出: "1,234,567.89"
特点:简化代码,但增加依赖。
⚠️ 注意事项
- 小数处理:正则和遍历法需显式处理小数(如
toFixed() 截断)。 - 负数兼容:上述正则需调整,例如添加负号匹配
/-?\d+/。 - 性能排序:
Intl.NumberFormat ≈ toLocaleString() > 手动遍历 > 正则。
推荐优先使用 toLocaleString() 或 Intl.NumberFormat (标准且高效),若需深度定制再选正则或手动实现。
该文章在 2026/1/9 16:07:50 编辑过