数字字符串格式化
问题描述
小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'
代码示例
def` solution(s: str) -> str:
# 去除前导零
s = s.lstrip('0')`
# 分离整数和小数部分
if '.' in s:
integer_part, fractional_part = s.split('.')
else:
integer_part, fractional_part = s, ''
# 格式化整数部分
if integer_part:
integer_part = ''.join(reversed(integer_part)) # 反转整数部分
integer_part = ','.join(integer_part[i:i+3] for i in range(0, len(integer_part), 3)) # 每三位插入一个逗号
integer_part = ''.join(reversed(integer_part)) # 再次反转回来
# 合并整数和小数部分
if fractional_part:
return f"{integer_part}.{fractional_part}"
else:
return integer_part
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')
代码解析
这段代码定义了一个名为solution的函数,用于将输入的字符串格式化为带千分位逗号且去除前导零的数字字符串,并保留小数部分。如果输入字符串中没有小数部分,则只返回整数部分的格式化结果。在__main__部分,通过三个示例测试了这个函数的正确性。具体步骤如下:
- 首先去除输入字符串
s的前导零。 - 接着根据是否存在小数点来分离整数部分和小数部分。
- 对于整数部分,先反转,然后每三位插入一个逗号,最后再反转回来。 4. 如果存在小数部分,则将整数部分和小数部分合并返回;如果没有小数部分,则直接返回整数部分。
总结
通过这次青训营的契机,我开始正式接触到了程序员的工作内容,感受到了代码的乐趣,Fighting!