最近看到一个把一个浮点数转化为汉字人民币的小题,感觉很有意思就去用java实现了一下,没想到没有想得那么简单,在网上搜了一下也不近人意,经过几次修改后,现在实现了,现在分享一下。
一、当输入一个浮点数后,我们要把它的整数部分和小数部分取出来。
二、然后把相应的整数、小数部分转化为汉字读法。
三、按照汉语的读法,不能存在零仟、零佰、零拾这样的读法但可以存在零万、零元等读法,这时候我们壹仟零佰零拾零陆圆把零佰、零拾这样的替换为零,变为壹仟零零陆圆,我们把连续为零零的替换为零就OK了。
package test; public class NumToRmb{ private static String[] hangArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; private static String[] unitArr = { "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰" }; private static String[] unitXiaoArr = { "分", "角" }; // 把一个浮点数分为整数和小数 public static String[] divide(double num) { long zheng = (long) num; long xiao = Math.round((num - zheng) * 100); String[] arr = new String[] { String.valueOf(zheng), String.valueOf(xiao) }; return arr; } // 把一个4位数转化为汉字 public static String toHantr(double numStr) { if (numStr < 0) { System.out.print("请输入一个整数"); } String[] arr1 = divide(numStr); // 得到整数部分 String zheng = arr1[0]; // 得到小数部分 String xiao = arr1[1]; String result = ""; // 处理整数部分 int numLen = zheng.length(); for (int i = 0; i < numLen; i++) { // 得到第i位的数值 int num = zheng.charAt(i) - '0'; // 数值的汉字表示 result += hangArr[num] + unitArr[numLen - 1 - i]; } // 处理小数部分 int sumLen = xiao.length(); for (int i = 0; i < sumLen; i++) { if (i > 2) break;// 只精确到后两位 // 得到第i位的数值 int xnum = xiao.charAt(i) - '0'; // 数值的汉字表示 result += hangArr[xnum] + unitXiaoArr[sumLen - 1 - i]; } // //替换所有零拾,零百,零仟为零 result = result.replaceAll("零拾", "零"); result = result.replaceAll("零佰", "零"); result = result.replaceAll("零仟", "零"); //把零零替换为零 if (result.indexOf("零零") != -1) { result = result.replaceAll("零零", "零"); } result = result.replaceAll("零亿", "亿"); result = result.replaceAll("零万", "万"); result = result.replaceAll("零圆", "圆"); return result; } public static void main(String[] args) { System.out.print(toHantr(1213301.56)); } }