jquery - javascript中如何将长数字格式化,如"10000"变成"10,000"或"10 000"
巴扎黑
巴扎黑 2017-04-10 12:42:18
[JavaScript讨论组]

在做一个和金融有关的系统,里面牵涉到金额数字这些东西,希望能在格式化后更适合阅读。

巴扎黑
巴扎黑

全部回复(2)
黄舟

在不少地方看过这个问题,没有看到特别满意的答案。
主要原因:

  • 我不希望因为一个函数去引入一个js文件
  • 没有考虑特殊的数字,比如.5, 5.
  • 没有考虑小数点
  • 没有考虑可能传入非法数值
  • 不够简洁

在此分享一下我的答案,全当抛砖引玉,不足的地方欢迎指正。

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
PHP中文网

用正则表达式匹配

比如:

result = "1234567890".replace(/\d+?(?=(?:\d{3})+$)/img, "$& ");
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号