處理數值,為每三位數加一個逗號,相容浮點型數值 以 和 為例 通過內置方法實現 通過正則表達式 利用正則表達式來處理的思路: 整數和浮點數是有差別的,整數從最右邊開始算,浮點數要從小數點'.'開始算 字元串分為兩部分,右邊是3 n位數字,左邊的部分添加','。n = {1,} 右邊的部分很好匹配: ...
處理數值,為每三位數加一個逗號,相容浮點型數值
以1234567.1234
和 12345678
為例
- 通過內置方法實現
function addComma(num = 0){
let temps = num.toString().split('.'), //處理浮點數的情況,整數時會返回原數值
target = temps[0].split('').reverse(), //倒序
lastIndex = target.length;
return target.map((item,index) => {
//第三個就增加一個',',要註意最後一個數字不添加
return ((index+1) % 3 === 0 && (index !== lastIndex - 1)) ? (','+ item) : item;
})
.reverse() //倒序回來
.join('') + (temps[1] ? '.' + temps[1] : ''); //如果是浮點數,就再加上小數部分
}
addComma(1234567.1234) //1,234,567.1234
addComma(12345678) //12,345,678
- 通過正則表達式
function addComma(num = 0){
let reg = num.toString().indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(\d{3})+$)/g;
return num.toString().replace(reg,'$1,');
}
addComma(1234567.1234) //1,234,567.1234
addComma(12345678) //12,345,678
利用正則表達式來處理的思路:
- 整數和浮點數是有差別的,整數從最右邊開始算,浮點數要從小數點'.'開始算
- 字元串分為兩部分,右邊是3*n位數字,左邊的部分添加','。n = {1,}
右邊的部分很好匹配:/(\d{3})+/
, 再加上開始算的符號,浮點數要加上 \.
(.
匹配除換行符之外的任何單個字元,加上\.
轉義,就是匹配'.')。整數加上$
結束符。
左邊的部分,必須依賴於右邊的部分。比如說必須右邊有三位,左邊才會匹配成功,加一個','。就需要用到?=
正向肯定查找(x(?=y)
僅當x後面跟著y時才會匹配x)。(\d)(?=y)
y就是右邊的部分。
再加上全局搜索的標誌 g
,不然只會匹配一組,只加一個','。