1、效果
| public static void main(String[] args) { |
| System.out.println(int2chineseNum(3456)); |
| System.out.println(int2chineseNum(-3456)); |
| System.out.println(bigDec2ChinaNum(new BigDecimal("12367.4852"))); |
| System.out.println(bigDec2ChinaNum(new BigDecimal("-72435.44"))); |
| } |
结果:
| 三千四百五十六 |
| 负三千四百五十六 |
| 一万二千三百六十七点四八五二 |
| 负七万二千四百三十五点四四 |
2、工具类
| |
| |
| |
| |
| public class NumToChinaUtil { |
| |
| private NumToChinaUtil() { |
| } |
| |
| |
| |
| private static final String[] CN_NUM = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; |
| |
| |
| |
| private static final String[] CN_UNIT = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"}; |
| |
| |
| |
| private static final String CN_NEGATIVE = "负"; |
| |
| |
| |
| private static final String CN_POINT = "点"; |
| |
| |
| |
| |
| |
| |
| |
| |
| public static String int2chineseNum(int intNum) { |
| if (intNum == 0){ |
| return CN_NUM[0]; |
| } |
| StringBuilder sb = new StringBuilder(); |
| boolean isNegative = false; |
| if (intNum < 0) { |
| isNegative = true; |
| intNum *= -1; |
| } |
| int count = 0; |
| while (intNum > 0) { |
| sb.insert(0, CN_NUM[intNum % 10] + CN_UNIT[count]); |
| intNum = intNum / 10; |
| count++; |
| } |
| if (isNegative) { |
| sb.insert(0, CN_NEGATIVE); |
| } |
| return sb.toString().replaceAll("零[千百十]", "零").replaceAll("零+万", "万") |
| .replaceAll("零+亿", "亿").replaceAll("亿万", "亿零") |
| .replaceAll("零+", "零").replaceAll("零$", ""); |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| public static String bigDec2ChinaNum(BigDecimal bigDecimalNum) { |
| if (bigDecimalNum == null) { |
| return CN_NUM[0]; |
| } |
| StringBuilder sb = new StringBuilder(); |
| |
| |
| String numStr = bigDecimalNum.abs().stripTrailingZeros().toPlainString(); |
| String[] split = numStr.split("\\."); |
| String integerStr = int2chineseNum(Integer.parseInt(split[0])); |
| sb.append(integerStr); |
| |
| if (split.length == 2) { |
| |
| sb.append(CN_POINT); |
| String decimalStr = split[1]; |
| char[] chars = decimalStr.toCharArray(); |
| for (char aChar : chars) { |
| int index = Integer.parseInt(String.valueOf(aChar)); |
| sb.append(CN_NUM[index]); |
| } |
| } |
| |
| int sigNum = bigDecimalNum.signum(); |
| if (sigNum == -1) { |
| sb.insert(0, CN_NEGATIVE); |
| } |
| return sb.toString(); |
| } |
| |
| |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)