您的位置:首页 > 教育 > 锐评 > seo外链优化策略_在线装修设计师咨询_信息流优化师职业规划_长沙营销推广

seo外链优化策略_在线装修设计师咨询_信息流优化师职业规划_长沙营销推广

2025/1/8 12:01:30 来源:https://blog.csdn.net/qq_54813250/article/details/144988777  浏览:    关键词:seo外链优化策略_在线装修设计师咨询_信息流优化师职业规划_长沙营销推广
seo外链优化策略_在线装修设计师咨询_信息流优化师职业规划_长沙营销推广

问题

问题描述

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

思路

要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,且保留小数部分并去掉无用的前置 0,我们可以分以下几步:

  1. 去掉前置无效的 0

    • 如果字符串以多个 0 开头(如 "0000123.45"),需要去掉这些无效的 0
    • 使用 BigDecimal 是一个方便的方式,它可以自动处理数字的前置 0,并保留小数部分。
  2. 分离整数部分和小数部分

    • split("\\.") 方法将字符串按小数点分成整数部分和小数部分。
    • 如果没有小数点(如 "123456"),则只需处理整数部分。
  3. 格式化整数部分

    • 从右往左遍历整数部分的字符,每隔 3 个字符插入一个逗号。
    • 注意在第一个字符前不添加逗号。
  4. 重新组合结果

    • 如果存在小数部分,则将格式化后的整数部分与小数部分用小数点 . 拼接。
    • 如果没有小数部分,则直接返回格式化后的整数部分。

解释

输入示例 1:"1294512.12412"

  1. 去掉前导零:通过 BigDecimal 处理字符串 1294512.12412,去掉前导零后得到的是 1294512.12412,无需变动。

  2. 转换为普通字符串number.toPlainString() 将该数字转化为 1294512.12412 字符串。

  3. 分离整数和小数部分:通过 split("\\.") 分割字符串,得到整数部分 "1294512" 和小数部分 "12412"

  4. 添加千分位逗号

    • 从右向左遍历整数部分 "1294512",每3位插入一个逗号:
      • 第一轮:2"2"
      • 第二轮:1"21"
      • 第三轮:5"521"
      • 第四轮:4"4521"
      • 第五轮:9"94521"
      • 第六轮:2"294521"
      • 第七轮:1"1294521"
    • 结果为 "1,294,512"
  5. 拼接整数和小数部分:最终的结果是 "1,294,512.12412"

输出1,294,512.12412

输入示例 2:"0000123456789.99"

  1. 去掉前导零:通过 BigDecimal 处理字符串 0000123456789.99,去掉前导零后得到 123456789.99

  2. 转换为普通字符串number.toPlainString() 得到 123456789.99 字符串。

  3. 分离整数和小数部分:通过 split("\\.") 分割字符串,得到整数部分 "123456789" 和小数部分 "99"

  4. 添加千分位逗号

    • 从右向左遍历整数部分 "123456789",每3位插入一个逗号:
      • 第一轮:9"9"
      • 第二轮:8"89"
      • 第三轮:7"789"
      • 第四轮:6"6789"
      • 第五轮:5"56789"
      • 第六轮:4"456789"
      • 第七轮:3"3456789"
      • 第八轮:2"23456789"
      • 第九轮:1"1,234,567,889"
    • 结果为 "1,234,567,889"
  5. 拼接整数和小数部分:最终的结果是 "1,234,567,889.99"

输出1,234,567,889.99

输入示例 3:"987654321"

  1. 去掉前导零:通过 BigDecimal 处理字符串 987654321,没有前导零,结果是 987654321

  2. 转换为普通字符串number.toPlainString() 得到 987654321 字符串。

  3. 分离整数和小数部分:通过 split("\\.") 分割字符串,得到整数部分 "987654321" 和小数部分 ""(没有小数部分)。

  4. 添加千分位逗号

    • 从右向左遍历整数部分 "987654321",每3位插入一个逗号:
      • 第一轮:1"1"
      • 第二轮:2"21"
      • 第三轮:3"321"
      • 第四轮:4"4321"
      • 第五轮:5"54321"
      • 第六轮:6"654321"
      • 第七轮:7"7654321"
      • 第八轮:8"87654321"
      • 第九轮:9"987654321"
    • 结果为 "987,654,321"
  5. 拼接整数和小数部分:最终的结果是 "987,654,321"

输出987,654,321

代码

import java.math.BigDecimal;public class Main {public static String solution(String s) {// 去掉前置无效 0(使用 BigDecimal)BigDecimal number = new BigDecimal(s);String str = number.toPlainString(); // 转化为普通字符串,保留小数部分但无科学计数法// 分离整数部分和小数部分String[] parts = str.split("\\."); // 用 "." 分割字符串String integerPart = parts[0]; // 整数部分String decimalPart = parts.length > 1 ? parts[1] : ""; // 小数部分// 为整数部分添加千分位逗号StringBuilder formattedInteger = new StringBuilder();int count = 0;for (int i = integerPart.length() - 1; i >= 0; i--) {formattedInteger.append(integerPart.charAt(i));count++;if (count % 3 == 0 && i != 0) {formattedInteger.append(",");}}formattedInteger.reverse(); // 逆序还原// 拼接小数部分if (!decimalPart.isEmpty()) {return formattedInteger.toString() + "." + decimalPart;} else {return formattedInteger.toString();}}public static void main(String[] args) {// 测试用例System.out.println(solution("1294512.12412")); // 输出 '1,294,512.12412'System.out.println(solution("0000123456789.99")); // 输出 '1,234,567,889.99'System.out.println(solution("987654321")); // 输出 '987,654,321'}
}

提交结果

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com