package com.itwang; import java.util.Arrays; /** * 浮点数转为人民币 */ public class NumberConventor { private String[] hanArr = {"零", "壹", "贰", "弎", "肆", "伍", "陆", "柒", "捌", "玖"}; private String[] unitArr = {"分","角","十", "百", "千","万","亿"}; /** * 把一个浮点数分解成整数部分和小数部分 * * @param num * @return */ private String[] divide(double num) { //将一个浮点数强制转换为long型,即得到它的整数部分 long zheng = (long) num; //浮点数减去整数得到小数部分,小数部分乘以100后再取整得到2为小数 long xiaoshu = Math.round((num - zheng) * 100); return new String[]{zheng + "", String.valueOf(xiaoshu)}; } /** * 将后面的两位小数转化为汉字 * @return */ private String douleToString(String numStr){ String result = ""; int numLen = numStr.length(); if (numStr.charAt(0) == '0' && numLen == 1){ return ""; } for (int i = 0;i < numLen;i++){ int num = numStr.charAt(i) - 48; result += hanArr[num] + unitArr[1 - i]; } return result; } /** * 把一个四位的数变成汉字字符串 */ private String toHanStr(String numStr) { String result = "";//存放最终结果 int numLen = numStr.length(); //扫描数字串从第一个不为零的地方开始 int j; for (j = 0; j < numLen; j++) { if (numStr.charAt(j) != '0') { break; } } //四个全是零 if (j == numLen) { return hanArr[0]; } //不是四个全是零 //从第一个不等于零的地方依次遍历数字字符串的每一位数字 for (int i = j; i < numLen; i++) { //把char型数字换成int型数字,因为它们的ASCII码值恰好相差48 //因此把char型数字减去48得到int型数字 int num = numStr.charAt(i) - 48; //如果不是最后一位数字,而且数字不是零,需添加单位(千,百,十) if (num != 0 && i != numLen - 1) { result += hanArr[num] + unitArr[numLen - i]; } else { //否则是最后一位则不添加单位,如果最后一位是零,连续两个零 if (i == numLen - 1 && num == 0) { return result; } //判断当前位置如果为零,判断下一个位置如果仍然为零直接跳过这两个零 if(i != numLen - 1 && (i + 1) != numLen && (numStr.charAt(i + 1) == '0')){ i++; } else { result += hanArr[num]; } } } return result; } /** * 从四位数字串扩展到12位 * @param numStr */ private String toRBM(double inputNum){ String numStr = divide(inputNum)[0]; String numStr2 = divide(inputNum)[1]; //换算整数部分 int numLen = numStr.length(); int entirePart = numLen / 4; int yuPart = numLen % 4; String result = ""; //四位数字或四位数字之内 if (numLen <= 4){ result += toHanStr(numStr); } if (numLen > 4 && numLen <= 8){ //获取最高位的4位数字串 String gaowei = numStr.substring(0,numLen - 4); //获取最低位的4位数字串 String disiwei = numStr.substring(numLen - 4); result += toHanStr(gaowei) + unitArr[5]; result += toHanStr(disiwei); } if (numLen > 8 && numLen <= 12){ //获取最高位的4位数字串 String gaowei = numStr.substring(0, numLen - 8); //获取中间位的4位数字串 String midlewei = numStr.substring(numLen - 8, numLen - 4); //获取最低位的4位数字串 String disiwei = numStr.substring(numLen - 4); result += toHanStr(gaowei) + unitArr[6]; result += toHanStr(midlewei) + unitArr[5]; result += toHanStr(disiwei); } if (numLen > 12){ return "输入的长度有误!"; } //换算小数部分 result += douleToString(numStr2); return result; } public static void main(String[] args) { NumberConventor numberConventor = new NumberConventor(); //numberConventor.divide(2346844.123)[0] double inputNum = 123456789354.123; System.out.println(numberConventor.toRBM(inputNum)); } }
运行结果: