84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
如234234变成234,234.求递归实现,代码越少越好。
有个超级简单的方法234234..toLocaleString()
估计你想实现数字的分位显示, "12345"这个想要显示为"12,345", 而不是"123,45", 有的人领会错了。有的人给的解决方案,对于 "123456"这个数字会输出为",123,456",明显多了一个逗号,我的方法不会有这个问题。
1L的回答(使用 NumberObject.toLocaleString(),把数字转换为字符串,使用本地数字格式顺序。)可以解决问题,但是不推荐,因为它取决于你本地的偏好设置,不同人运行结果可能不一样。
NumberObject.toLocaleString()
也支持带小数点的!
"12345".split('').reverse().join('').replace(/(\d{3})\B/g,',').split('').reverse().join(''); //输出 12,345 "123456789".split('').reverse().join('').replace(/(\d{3})\B/g,',').split('').reverse().join(''); //输出 123,456,789 "1234567.89".split('').reverse().join('').replace(/(\d{3})\B/g,',').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
楼上的比较好
function get(num) { num = num.split('').reverse().join('') return num.match(/\d{1,3}/g).join(',').split('').reverse().join('') }
雷雷
'2342342323'.match(/\d{1,3}/g).join(',') // -> 234,234,232,3
最短的代码来了, 看看还有没有更短的。
从左到右
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, ',') }
(234234+"").replace(/\B(?=(\d{3})+(?!\d))/g, ",")
前几天有人提过这个问题 /q/10...不过上面的方法不适用于带小数点的,鉴于js不支持反向预查,对于带小数点用另外一套正则吧
(234234.23132+"").replace(/\B(?=(\d{3})+(?=\.))/g, ",")
还有递归是什么鬼,这个不需要用递归吧
有个超级简单的方法234234..toLocaleString()
估计你想实现数字的分位显示, "12345"这个想要显示为"12,345", 而不是"123,45", 有的人领会错了。
有的人给的解决方案,对于 "123456"这个数字会输出为",123,456",明显多了一个逗号,我的方法不会有这个问题。
1L的回答(使用
NumberObject.toLocaleString()
,把数字转换为字符串,使用本地数字格式顺序。)可以解决问题,但是不推荐,因为它取决于你本地的偏好设置,不同人运行结果可能不一样。非递归方式实现
也支持带小数点的!
递归方式实现
本问题要求用递归方式实现,所以解答也提供了递归方式实现。
楼上的比较好
雷雷
最短的代码来了, 看看还有没有更短的。
从左到右
从右到左
前几天有人提过这个问题 /q/10...
不过上面的方法不适用于带小数点的,鉴于js不支持反向预查,对于带小数点用另外一套正则吧
还有递归是什么鬼,这个不需要用递归吧
雷雷