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

43 阅读3分钟

问题描述

小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'

背景介绍

在数字的显示和处理过程中,千分位逗号是一个常见的格式化需求,尤其是在财务、统计、科学研究等领域。 千分位逗号通常用于提高数字的可读性,使大数变得更加清晰易懂。 例如,数字 1234567 会被格式化为 1,234,567 1,234,567`。这种格式特别适用于具有较大数值的情况,如银行存款、公司财务报表等。

此外,当用户输入数据时,尤其是在表单或接口中,可能会输入带有无用前导零的数字(例如 000123.45),这些前导零需要去除,因为它们对于计算或显示没有实际意义。 这类问题涉及到字符串处理、格式化和清理数据,是软件开发中常见的需求。

解题思路

要解决小M的问题,目标是将输入的数字字符串进行格式化,输出符合千分位逗号规范的字符串,并且要去除无用的前导零。 具体的步骤可以分为以下几个部分:

1. 去除前导零

用户输入的数字字符串可能会带有前导零(如 000123.45),这些零需要去除。 去除前导零

  • 如果数字字符串中包含小数部分,需要特别处理,因为小数点前面的零才能去除,但小数点后的零应当保留(例如 0.005 需要保持为 0.005)。

2. 分离整数部分与小数部分

格式化时,我们首先需要把数字分为整数部分和小数部分。 整数部分需要进行千分位逗号的处理,而小数部分需要保持原样。

  • 如果输入的数字没有小数部分(例如 1234567),那么我们只需要对整数部分进行千分位逗号格式化。
  • 如果输入的数字有小数部分(例如 1234567.89),则需要在整数部分应用千分位逗号格式,而小数部分则不做任何改动,直接附加到结果的末尾。

3. 千分位逗号格式化

对整数部分进行千分位格式化是关键步骤。 在大多数编程语言中,字符串格式化和数值格式化都提供了内建的函数来完成这一操作。 例如,Python 中的 format() 函数可以轻松地将数字格式化为带有千分位逗号的字符串。

  • 对整数部分进行分组,通常每三位一组进行分隔,并在每组之间插入逗号。

4. 合并结果

在处理完整数部分和小数部分后,我们将两部分合并在一起。 若存在小数部分,将整数部分和小数部分用小数点连接。 如果没有小数部分,直接返回处理后的整数部分。

代码参考

def solution(num_str: str) -> str:
    # 去掉前导零
    num_str = num_str.lstrip('0') or '0'
    # 分割整数和小数部分
    if '.' in num_str:
        integer_part, decimal_part = num_str.split('.')
    else:
        integer_part, decimal_part = num_str, ''
    # 添加千分位逗号
    integer_part = f"{int(integer_part):,}"
    # 拼接整数和小数部分
    if decimal_part:
        return f"{integer_part}.{decimal_part}"
    else:
        return integer_part