数字字符串格式化

devtools/2024/11/14 6:36:16/

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

问题理解

  1. 输入格式:输入是一个不带千分位逗号的数字字符串,可能包含小数部分,也可能不包含。
  2. 输出格式:输出是一个带千分位逗号的数字字符串,保留小数部分,并且去掉前面的无用 0

解题思路

  1. 去除前导零:首先需要去掉字符串前面的无用 0。可以使用 strip 方法去掉前导零。
  2. 分离整数和小数部分:将字符串分为整数部分和小数部分。可以使用 split 方法根据小数点进行分割。
  3. 处理整数部分:对整数部分进行千分位逗号的插入。可以从后往前每三位插入一个逗号。
  4. 合并结果:将处理后的整数部分和小数部分重新合并。

Python代码

python">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, ''# 处理整数部分if len(integer_part) > 3:# 从后往前每三位插入一个逗号integer_part = ','.join([integer_part[max(i-3, 0):i] for i in range(len(integer_part), 0, -3)][::-1])# 合并结果if decimal_part:return f"{integer_part}.{decimal_part}"else:return integer_partif __name__ == '__main__':print(solution("1294512.12412") )print(solution("0000123456789.99") )print(solution("987654321"))

C#代码

using System;
using System.Text;class Program
{static string Solution(string s){// 去掉前导零s = s.TrimStart('0');if (s == ""){s = "0";}// 分离整数和小数部分string integerPart, decimalPart;if (s.Contains('.')){string[] parts = s.Split('.');integerPart = parts[0];decimalPart = parts[1];}else{integerPart = s;decimalPart = "";}// 处理整数部分if (integerPart.Length > 3){StringBuilder sb = new StringBuilder();int count = 0;for (int i = integerPart.Length - 1; i >= 0; i--){sb.Insert(0, integerPart[i]);count++;if (count % 3 == 0 && i != 0){sb.Insert(0, ',');}}integerPart = sb.ToString();}// 合并结果if (decimalPart != ""){return $"{integerPart}.{decimalPart}";}else{return integerPart;}}static void Main(string[] args){Console.WriteLine(Solution("1294512.12412") );Console.WriteLine(Solution("0000123456789.99") );Console.WriteLine(Solution("987654321"));}
}

 

这个题目主要考察以下几个编程和字符串处理方面的知识点:

1. 字符串操作

  • 去除前导零:使用 lstrip('0') 方法去除字符串前面的无用 0
  • 分割字符串:使用 split('.') 方法将字符串分割为整数部分和小数部分。
  • 插入字符:在字符串中插入逗号,实现千分位格式化。

2. 列表推导式

  • 逆序处理:使用列表推导式从后往前每三位插入一个逗号,然后逆序合并。

3. 条件判断

  • 处理特殊情况:如输入字符串为空或全为 0 的情况。
  • 合并结果:根据是否有小数部分,选择合适的格式返回结果。

4. 字符串格式化

  • 格式化输出:使用 f-string 或 format 方法将整数部分和小数部分合并成最终结果。

5. 边界条件处理

  • 处理边界情况:如输入字符串为 "0" 或 "0000" 等特殊情况。

总结

这个题目通过字符串操作、列表推导式、条件判断和字符串格式化等知识点,考察了编程者对字符串处理和逻辑思维的能力。通过解决这个问题,可以加深对这些知识点的理解和应用。


http://www.ppmy.cn/devtools/133850.html

相关文章

Prometheus 和 Grafana 以进行服务器监控

部署 Prometheus 和 Grafana 以进行服务器监控是一项非常实用的任务,它们可以帮助你收集和可视化系统性能数据。以下是一个详细的步骤指南,帮助你在 Linux 服务器上部署 Prometheus 和 Grafana,进行监控配置。 1. 安装 Prometheus 1.1 下载…

约束(MYSQL)

not null(非空) unique(唯一) default(默认约束,规定值) 主键约束primary key(非空且唯一) auto_increment(自增类型) 复合主键 check&#xff08…

golang 常用的占位符 %w, %v, %s

在 Go 语言中,fmt 包提供了一些常用的占位符,用于格式化不同类型的输出。 1. %s - 字符串 用于输出字符串(如果是切片,则输出其字节内容)。 go fmt.Printf(“%s\n”, “hello”) // hello 2. %v - 默认格式 这个占…

Ajax 与 Vue 框架应用点——随笔谈

老式 在老式的技术中,一个网页通常由前端工程师直接使用 HTML、CSS、JavaScript 编写而成 这种方式的优点很明显:简单粗暴,方便工程师以简单的思维完成工作 当然,缺点也很明显,包括但不限于: 直接原生开发…

PyQt入门指南五十七 桌面应用开发实战案例

下面是一个简单的PyQt桌面应用开发实战案例。这个案例将展示如何创建一个基本的PyQt5应用程序,包含一个窗口、一个按钮和一个标签。 环境准备 首先,确保你已经安装了PyQt5。你可以使用pip来安装: pip install PyQt5 代码实现 下面是一个完…

【go从零单排】Regular Expressions正则表达式

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 Go 中的正则表达式是通过 regexp 包提供的,允许开发者使用强大的模式…

批量规范化与ResNet——pytorch与paddle实现批量规范化与ResNet

批量规范化与ResNet——pytorch与paddle实现批量规范化与ResNet 本文将深入探讨批量规范化与ResNet的理论基础,并通过PyTorch和PaddlePaddle两个深度学习框架来展示如何实现批量规范化与ResNet模型。我们将首先介绍批量规范化与ResNet的基本概念,这些理…

内存大小的单位转换

计算机中内存大小的单位转换通常是按照以下规则进行的: 基本单位 1 字节 (Byte) 8 位 (bit) 常见的内存单位及转换关系 1 字节 (Byte) 8 位 (bit)1 千字节 (KB) 1,024 字节 (B)1 兆字节 (MB) 1,024 千字节 (KB) 1,024 * 1,024 字节 (B)1 吉字节 (GB) 1,02…