如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不支持反向预查,对于带小数点用另外一套正则吧
还有递归是什么鬼,这个不需要用递归吧
雷雷