javascript - js 字符串中加入逗号
高洛峰
高洛峰 2017-04-11 09:08:37
[JavaScript讨论组]

如题,现有一个数字字符串,如果字符串中没有小数点,从右到左每隔3位加入一个逗号,即

1234567890 --> 1,234,567,890

如果字符串中有小数点,整数部分规则不变,小数部分从左到右每隔3位加入一个逗号,即

1234567890.12345 --> 1,234,567,890.123,45

求个算法,谢谢!

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
PHPz
function h(str){
  if(/\./.test(str)){
    return str.replace(/\d(?=(\d{3})+\.)/g, "$&,").split("").reverse().join("").replace(/\d(?=(\d{3})+\.)/g, "$&,").split("").reverse().join("");
  }else{
    return str.replace(/\d(?=(\d{3})+$)/g, "$&,");
  }
}

-----------分割线

貌似找到了另一个好方法,分享一下

//加强版
function hh(str){
  if(/\./.test(str)){
    return str.replace(/\d(?=(\d{3})+\.)/g, "$&,").replace(/\d{3}(?![,.]|$)/g, "$&,");
  }else{
    return str.replace(/\d(?=(\d{3})+$)/g, "$&,");
  }
}

希望经得住考验。。

阿神

蛤蛤,你们啊,总想搞个大新闻。

var num = 1234567890;
console.log(num.toLocaleString());

num = 1234567890.12345;
console.log(num.toLocaleString());

不过有个缺点是toLocaleString默认按照当前特定语言环境下的标准进行格式化,小数只会保留前几位。
给个文档:
https://developer.mozilla.org...


更新一下

满足题主的小数点要求

function haha(num) {
  return num.toString().num.split('.').map((v, i) => {
    if (!i) return Number(v).toLocaleString();
    return '.' + (Number(v.split('').reverse().join('')).toLocaleString()).split('').reverse().join('');
  }).join('');
}
console.log(haha(123456789.12345))
console.log(haha(123456789))
伊谢尔伦
  1. 你先讲讲这个到底是怎么变的……

    123456.7890 --> 1,234,567,890.123,45
  2. 每隔三位加逗号的话,大概可以这样:

    String.prototype.formatNumber = function(str) {
    return str.split(".")
        .map((n, i) => i
            ? n
            : n.split("").reverse().join(""))
        .map((n) => n.replace(/[\d]{3})(?!$)/g, "$1,"))
        .map((n, i) => i
            ? n
            :n.split("").reverse().join(""))
        .join(".");
    }
    
    console.log("1234567890".formatNumber());    //1,234,567,890
    console.log("123456.7890".formatNumber());   //123,456.789,0
怪我咯
function h(str){
  if(/\./.test(str)){
    return str.replace(/\d(?=(\d{3})+\.)/g, "$&,").split("").reverse().join("").replace(/\d(?=(\d{3})+\.)/g, "$&,").split("").reverse().join("");
  }else{
    return str.replace(/\d(?=(\d{3})+$)/g, "$&,");
  }
}
天蓬老师

这个问题挺好的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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