扫码关注官方订阅号
在做一个和金融有关的系统,里面牵涉到金额数字这些东西,希望能在格式化后更适合阅读。
在不少地方看过这个问题,没有看到特别满意的答案。 主要原因:
在此分享一下我的答案,全当抛砖引玉,不足的地方欢迎指正。
function formatNumber(num, precision, separator) { var parts; // 判断是否为数字 if (!isNaN(parseFloat(num)) && isFinite(num)) { // 把类似 .5, 5. 之类的数据转化成0.5, 5, 为数据精度处理做准, 至于为什么 // 不在判断中直接写 if (!isNaN(num = parseFloat(num)) && isFinite(num)) // 是因为parseFloat有一个奇怪的精度问题, 比如 parseFloat(12312312.1234567119) // 的值变成了 12312312.123456713 num = Number(num); // 处理小数点位数 num = (typeof precision !== 'undefined' ? num.toFixed(precision) : num).toString(); // 分离数字的小数部分和整数部分 parts = num.split('.'); // 整数部分加[separator]分隔, 借用一个著名的正则表达式 parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + (separator || ',')); return parts.join('.'); } return NaN; }
测试:
formatNumber(10000) "10,000" formatNumber(10000, 2) "10,000.00" formatNumber(10000.123456, 2) "10,000.12" formatNumber(10000.123456, 2, ' ') "10 000.12" formatNumber(.123456, 2, ' ') "0.12" formatNumber(56., 2, ' ') "56.00" formatNumber(56., 0, ' ') "56" formatNumber('56.') "56" formatNumber('56.a') NaN
用正则表达式匹配
比如:
result = "1234567890".replace(/\d+?(?=(?:\d{3})+$)/img, "$& ");
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
在不少地方看过这个问题,没有看到特别满意的答案。
主要原因:
在此分享一下我的答案,全当抛砖引玉,不足的地方欢迎指正。
测试:
用正则表达式匹配
比如:
result = "1234567890".replace(/\d+?(?=(?:\d{3})+$)/img, "$& ");