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,',').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
高洛峰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('')
}
伊谢尔伦2017-05-19 10:38:04
'2342342323'.match(/\d{1,3}/g).join(',') // -> 234,234,232,3
最短的程式碼來了, 看看還有沒有更短的。
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, ',')
}
我想大声告诉你2017-05-19 10:38:04
(234234+"").replace(/\B(?=(\d{3})+(?!\d))/g, ",")
前幾天有人提過這個問題 /q/10...
不過上面的方法不適用於帶小數點的,鑑於js不支持反向預查,對於帶小數點用另外一套正則吧
(234234.23132+"").replace(/\B(?=(\d{3})+(?=\.))/g, ",")
還有遞歸是什麼鬼,這個不需要用遞歸吧