最近看到一个把一个浮点数转化为汉字人民币的小题,感觉很有意思就去用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));} }