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不支持反向預查,對於帶小數點用另外一套正則吧
還有遞歸是什麼鬼,這個不需要用遞歸吧
雷雷