suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Wie füge ich in js rekursiv allen drei Zahlen ein Komma hinzu?

Zum Beispiel wird 234.234 zu 234.234. Je weniger Code, desto besser.

習慣沉默習慣沉默2793 Tage vor792

Antworte allen(8)Ich werde antworten

  • 仅有的幸福

    仅有的幸福2017-05-19 10:38:04

    有个超级简单的方法234234..toLocaleString()

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-19 10:38:04

    估计你想实现数字的分位显示, "12345"这个想要显示为"12,345", 而不是"123,45", 有的人领会错了。
    有的人给的解决方案,对于 "123456"这个数字会输出为",123,456",明显多了一个逗号,我的方法不会有这个问题。

    1L的回答(使用 NumberObject.toLocaleString(),把数字转换为字符串,使用本地数字格式顺序。)可以解决问题,但是不推荐,因为它取决于你本地的偏好设置,不同人运行结果可能不一样。

    非递归方式实现

    也支持带小数点的!

    "12345".split('').reverse().join('').replace(/(\d{3})\B/g,'$1,').split('').reverse().join('');  //输出 12,345
    
    "123456789".split('').reverse().join('').replace(/(\d{3})\B/g,'$1,').split('').reverse().join(''); //输出 123,456,789
    
    "1234567.89".split('').reverse().join('').replace(/(\d{3})\B/g,'$1,').split('').reverse().join(''); //输出 1,234,567.89

    递归方式实现

    本问题要求用递归方式实现,所以解答也提供了递归方式实现。

    //只处理整数
    function addComma(str, currentIndex, result) {
        if (currentIndex === undefined) {
            currentIndex = str.length - 1;
        }
        if (result === undefined) {
            result = '';
        }
        if (currentIndex < 0) {
            return result;
        }
        result = str.charAt(currentIndex) + result;
        if ((str.length - currentIndex) % 3 == 0 && currentIndex != 0) {
            result = "," + result;
        }
        return addComma(str, currentIndex - 1, result);
    }
    
    var n = '123456';
    var output = addComma(n);  
    console.log(output);    //输出123,456
    
    //带小数的处理示例
    var n = '123456.78';
    var output = addComma(n.split('.')[0]) + '.' + n.split('.')[1];
    console.log(output);   // 输出 123,456.78

    Antwort
    0
  • 高洛峰

    高洛峰2017-05-19 10:38:04

    楼上的比较好

    function get(num) {
        num = num.split('').reverse().join('')
        return num.match(/\d{1,3}/g).join(',').split('').reverse().join('')
    }
    

    Antwort
    0
  • 阿神

    阿神2017-05-19 10:38:04

    function addComma(str) {
        if(str.length <= 3) {
            return str;
        }
        var res = str.split("");
        var resStr = res.splice(0, 3);
        return resStr.join("") + "," + addComma(res.join(""));
    }

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-19 10:38:04

    '2342342323'.match(/\d{1,3}/g).join(',') // -> 234,234,232,3

    最短的代码来了, 看看还有没有更短的。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-19 10:38:04

    从左到右

    function myFunc(str) {
        return str.split('').reverse().join('').replace(/\B(?=(?:\d{3})+\b)/g, ',').split('').reverse().join('')
    }

    从右到左

    function myFunc(str) {
        return str.replace(/\B(?=(?:\d{3})+\b)/g, ',')
    }

    Antwort
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:38:04

    (234234+"").replace(/\B(?=(\d{3})+(?!\d))/g, ",")

    前几天有人提过这个问题 /q/10...
    不过上面的方法不适用于带小数点的,鉴于js不支持反向预查,对于带小数点用另外一套正则吧

    (234234.23132+"").replace(/\B(?=(\d{3})+(?=\.))/g, ",")

    还有递归是什么鬼,这个不需要用递归吧

    Antwort
    0
  • PHPz

    PHPz2017-05-19 10:38:04

        comdify : function (n){
          var re=/\d{1,3}(?=(\d{3})+$)/g;
          var n1 = String(n).replace(/^(\d+)((\.\d+)?)$/,function(s,s1,s2){return s1.replace(re,"$&,")+s2;});
          return n1;
        }

    Antwort
    0
  • StornierenAntwort