关于国际贸易的网站,word没有安装wordpress,wordpress 用户 新增,wordpress下载教程问题
问题描述
小M在工作时遇到了一个问题#xff0c;他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式#xff0c;并且保留小数部分。小M还发现#xff0c;有时候输入的数字字符串前面会有无用的 0#xff0c;这些也需要精简掉。请你帮助小M编写程…问题
问题描述
小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我们可以分以下几步 去掉前置无效的 0 如果字符串以多个 0 开头如 0000123.45需要去掉这些无效的 0。使用 BigDecimal 是一个方便的方式它可以自动处理数字的前置 0并保留小数部分。 分离整数部分和小数部分 用 split(\\.) 方法将字符串按小数点分成整数部分和小数部分。如果没有小数点如 123456则只需处理整数部分。 格式化整数部分 从右往左遍历整数部分的字符每隔 3 个字符插入一个逗号。注意在第一个字符前不添加逗号。 重新组合结果 如果存在小数部分则将格式化后的整数部分与小数部分用小数点 . 拼接。如果没有小数部分则直接返回格式化后的整数部分。 解释
输入示例 11294512.12412 去掉前导零通过 BigDecimal 处理字符串 1294512.12412去掉前导零后得到的是 1294512.12412无需变动。 转换为普通字符串number.toPlainString() 将该数字转化为 1294512.12412 字符串。 分离整数和小数部分通过 split(\\.) 分割字符串得到整数部分 1294512 和小数部分 12412。 添加千分位逗号 从右向左遍历整数部分 1294512每3位插入一个逗号 第一轮2 → 2第二轮1 → 21第三轮5 → 521第四轮4 → 4521第五轮9 → 94521第六轮2 → 294521第七轮1 → 1294521结果为 1,294,512。 拼接整数和小数部分最终的结果是 1,294,512.12412。
输出1,294,512.12412
输入示例 20000123456789.99 去掉前导零通过 BigDecimal 处理字符串 0000123456789.99去掉前导零后得到 123456789.99。 转换为普通字符串number.toPlainString() 得到 123456789.99 字符串。 分离整数和小数部分通过 split(\\.) 分割字符串得到整数部分 123456789 和小数部分 99。 添加千分位逗号 从右向左遍历整数部分 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。 拼接整数和小数部分最终的结果是 1,234,567,889.99。
输出1,234,567,889.99
输入示例 3987654321 去掉前导零通过 BigDecimal 处理字符串 987654321没有前导零结果是 987654321。 转换为普通字符串number.toPlainString() 得到 987654321 字符串。 分离整数和小数部分通过 split(\\.) 分割字符串得到整数部分 987654321 和小数部分 没有小数部分。 添加千分位逗号 从右向左遍历整数部分 987654321每3位插入一个逗号 第一轮1 → 1第二轮2 → 21第三轮3 → 321第四轮4 → 4321第五轮5 → 54321第六轮6 → 654321第七轮7 → 7654321第八轮8 → 87654321第九轮9 → 987654321结果为 987,654,321。 拼接整数和小数部分最终的结果是 987,654,321。
输出987,654,321
代码
import java.math.BigDecimal;public class Main {public static String solution(String s) {// 去掉前置无效 0使用 BigDecimalBigDecimal 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.12412System.out.println(solution(0000123456789.99)); // 输出 1,234,567,889.99System.out.println(solution(987654321)); // 输出 987,654,321}
}提交结果