最近看到一個把一個浮點數轉化為漢字人民幣的小題,感覺很有意思就去用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)); } }