刷题系列 - 数字字符串格式化

54 阅读1分钟

数字字符串格式化

1.问题描述

小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。


2.测试样例

样例1:

输入:s = "1294512.12412"
输出:'1,294,512.12412'

样例2:

输入:s = "0000123456789.99"
输出:'123,456,789.99'

样例3:

输入:s = "987654321"
输出:'987,654,321'

3.代码

测试用例中含0开头的及数值超长的用例,若使用Number处理0开头的,数值超长的数字则会变,如7713490060187657677134900601876580,若不用Number则需要字符串处理,0还是需要正则完成

注意:

  1. 前置0需要去除----正则
  2. 数值超长按照Number处理数值会变
  3. 小数点前为0直接返回----特殊逻辑
  4. 整数部分、小数部分分开处理
function solution(s) {
    const arrNum = s.split('.');
    const dealNum = arrNum[0].replace(/^0+/, '') || '0';
    if (dealNum === '0') {
        return s;
    }
    const arr1 = dealNum.split('').reverse();
    const curArr = []
    const mapCount = Math.ceil(arr1.length / 3)
    new Array(mapCount).fill(1).forEach(((item, ind) => {
        const curStr = arr1.join('').substr(ind * 3, 3)
        curArr.push(curStr)
    }))
    const finalStr = curArr.join(',').split('').reverse().join('');
    return arrNum[1] ? finalStr + '.' + arrNum[1] : finalStr
}

function main() {
    console.log(solution("0000123456789.99"))
    console.log(solution("77134900601876576"))
    console.log(solution("0.987654321") === '0.987654321');
    console.log(solution("1294512.12412") === '1,294,512.12412');
    console.log(solution("0000123456789.99") === '123,456,789.99');
    console.log(solution("987654321") === '987,654,321');
}

main();