数字字符串格式化 | 豆包MarsCode AI刷题

133 阅读1分钟

问题理解

我们需要将一个不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。此外,如果输入的数字字符串前面有无效的 0,这些 0 也需要被精简掉。

数据结构选择

由于我们处理的是字符串,并且需要对字符串进行格式化操作,因此我们可以直接使用字符串操作来完成任务。

算法步骤

  1. 去除前导零:首先,我们需要去除输入字符串前面的无效 0。可以使用 strip 方法来去除前导零。
  2. 分离整数和小数部分:将字符串分为整数部分和小数部分。可以使用 split 方法来实现。
  3. 格式化整数部分:对整数部分进行千分位逗号的格式化。可以使用 reversedjoin 方法来实现。
  4. 合并整数和小数部分:将格式化后的整数部分和小数部分重新合并。

def solution(s: str) -> str:
    # 去除前导零
    s = s.lstrip('0')
    if s == '':
        s = '0'
    
    # 分离整数和小数部分
    if '.' in s:
        integer_part, decimal_part = s.split('.')
    else:
        integer_part, decimal_part = s, ''
    
    # 格式化整数部分
    formatted_integer = ''
    for i, char in enumerate(reversed(integer_part)):
        if i > 0 and i % 3 == 0:
            formatted_integer = ',' + formatted_integer
        formatted_integer = char + formatted_integer
    
    # 合并整数和小数部分
    if decimal_part:
        return f"{formatted_integer}.{decimal_part}"
    else:
        return formatted_integer
​
if __name__ == '__main__':
    print(solution("1294512.12412") == '1,294,512.12412')
    print(solution("0000123456789.99") == '123,456,789.99')
    print(solution("987654321") == '987,654,321')