浏览 575 次
锁定老帖子 主题:数字人命币转换为大写
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2020-10-21
/** * @description 记得有次去面试的时候,被问到将数字转化为人命币大写的题目,刚开始看到题目的时候觉得很容易,但是越看越觉得没有头绪; * 今天在看C#的例子的时候,发现有用C#实现的实例,闲来无事,用Java也实现一下; 整数部分支持16位到万亿, * 小数部分支持4位到毫,共计20位; * @author xtayhame date 2020年10月21日 * * @addr:huanghuagang.guangzhou */ public class ChinesNumber { static String[] HB_UPPER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "扒", "玖" }; static String[] HB_JZ1 = { "仟", "佰", "拾", "" }; static String[] HB_JZ2 = { "", "万", "亿", "万亿" }; static String[] HB_JZ3 = { "角", "分", "厘", "毫" }; /** * 将数字转换为大写 * * @param val * @return */ public static String toChinese(String money) { String ret = ""; String[] monegArray = money.split("\\."); String interGalNum = monegArray[0]; int unitLength = (interGalNum.length() + 3) / 4; if (interGalNum.length() > 16) { System.out.println("暂不支持超过16位整数的数字."); return null; } String addStr = ""; String preStr = ""; for (int i = 0; i < unitLength; i++) { String innerRet = ""; // 如果是第一次截取,可能是四位或者不够四位 if (i == 0) { preStr = interGalNum.substring(addStr.length(), interGalNum.length() - (unitLength - 1) * 4); } else { // 从左到右分别获取四位数 preStr = interGalNum.substring(addStr.length(), addStr.length() + 4); } String newPreStr = ""; // 为方便处理,不足4位,补0 if (preStr.length() < 4) { newPreStr = String.format("%04d", Integer.parseInt(preStr)); } else { newPreStr = preStr; } String currUnit = HB_JZ2[unitLength - i - 1]; // 获取当前的HB_JZ2值 for (int j = 0; j < newPreStr.length(); j++) { String num2 = String.valueOf(newPreStr.charAt(j)); if ("0".equals(num2)) { continue; } innerRet = innerRet + HB_UPPER[Integer.parseInt(num2)] + HB_JZ1[j]; } ret = ret + innerRet + " " + currUnit + " "; addStr += preStr; } // 处理小数 if (monegArray.length == 2) { String innerRet = ""; String decimalNum = monegArray[1]; // 小数最多只能是4位 if (decimalNum.length() > 4) { decimalNum = decimalNum.substring(0, 4); } for (int i = 0; i < decimalNum.length(); i++) { String num1 = String.valueOf(decimalNum.charAt(i)); innerRet = innerRet + HB_UPPER[Integer.parseInt(num1)] + HB_JZ3[i]; } ret = ret + innerRet; } return ret; } public static void main(String[] args) { String a = "1234567891234567.6789"; System.out.println(ChinesNumber.toChinese(a)); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |