数字字符串格式化(javascript版)-豆包marscode算法刷题

88 阅读2分钟

问题描述

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

测试样例

样例1:

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

样例2:

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

样例3:

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

题解

function solution(s) {
    // 去除前后空格
    s = s.trim();
    
    // 分离整数部分和小数部分
    let parts = s.split('.');
    let integerPart = parts[0];
    let decimalPart = parts.length > 1 ? parts[1] : '';
    
    // 去除整数部分的前导零
    integerPart = integerPart.replace(/^0+/, '');
    
    // 如果整数部分为空,则设置为 "0"
    if (integerPart === '') {
        integerPart = '0';
    }
    
    // 添加千分位逗号
    integerPart = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
    
    // 组合整数部分和小数部分
    let formattedNumber = decimalPart ? `${integerPart}.${decimalPart}` : integerPart;
    
    return formattedNumber;
}

function main() {
    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');
    console.log(solution("77134900601876576") === '77,134,900,601,876,576');
}

main();

解题思路

  1. 去除前后空格:使用 trim() 方法去除输入字符串的前后空格。
  2. 分离整数部分和小数部分:使用 split('.') 方法将输入字符串分为整数部分和小数部分。
  3. 去除整数部分的前导零:使用正则表达式 /^0+/ 去除整数部分的前导零。如果整数部分为空,则将其设置为 "0"
  4. 添加千分位逗号:使用正则表达式 \B(?=(\d{3})+(?!\d)) 在适当的位置插入千分位逗号。
  5. 组合整数部分和小数部分:如果存在小数部分,则将其与整数部分组合;否则,仅返回整数部分。