Double类型的数字转中文大写

/**
	 * 转换成大写金额(最大26位有效数字,小数点前24位,小数点后2位)
	 * 当数值过大时应注意精度
	 * 
	 */
	public static String moneyToChinese(double amount) {
		String[] yuan = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖",
				"拾", "佰", "仟", "万", "亿", "圆", "角", "分", "负" };

		NumberFormat format = NumberFormat.getInstance(Locale.CHINA);
		format.setMaximumFractionDigits(2);
		format.setMinimumFractionDigits(2);
		format.setGroupingUsed(false);

		String money = format.format(amount);
		
		// 记录符号
		String flag = null;
		if (money.indexOf('-') == 0) {
			flag = yuan[18];
			money = money.substring(1);
		}
		
		// 最大小数点前24位
		if(money.length() > 27){
			return "超出有效范围";
		}

		StringBuilder strb = new StringBuilder();

		char[] chars = money.toCharArray();
		int len = chars.length;
		for (int i = len - 1; i >= 0; i--) {
			String temp = null;
			switch (chars[i]) {
			case '0':
				temp = yuan[0];
				break;
			case '1':
				temp = yuan[1];
				break;
			case '2':
				temp = yuan[2];
				break;
			case '3':
				temp = yuan[3];
				break;
			case '4':
				temp = yuan[4];
				break;
			case '5':
				temp = yuan[5];
				break;
			case '6':
				temp = yuan[6];
				break;
			case '7':
				temp = yuan[7];
				break;
			case '8':
				temp = yuan[8];
				break;
			case '9':
				temp = yuan[9];
				break;
			case '.':
				temp = yuan[15];
				break;
			}

			switch (len - 1 - i) {
			case 0:
				temp += yuan[17];
				break;
			case 1:
				temp += yuan[16];
				break;
			case 4:
			case 8:
			case 12:
			case 16:
			case 20:
			case 24:
				temp += yuan[10];
				break;
			case 5:
			case 9:
			case 13:
			case 17:
			case 21:
			case 25:
				temp += yuan[11];
				break;
			case 6:
			case 10:
			case 14:
			case 18:
			case 22:
			case 26:
				temp += yuan[12];
				break;
			case 7:
			case 15:
			case 23:
				temp += yuan[13];
				break;
			case 11:
			case 19:
				temp += yuan[14];
				break;
			}

			strb.insert(0, temp);
		}

		// 插入符号位
		if (null != flag) {
			strb.insert(0, flag);
		}

		String result = strb.toString();
		result = result.replaceAll("零拾", "零");
		result = result.replaceAll("零佰", "零");
		result = result.replaceAll("零仟", "零");
		result = result.replaceAll("零零零", "零");
		result = result.replaceAll("零零", "零");
		result = result.replaceAll("零角零分", "整");
		result = result.replaceAll("零分", "整");
		result = result.replaceAll("零角", "零");
		result = result.replaceAll("零亿零万零圆", "亿圆");
		result = result.replaceAll("亿零万零圆", "亿圆");
		result = result.replaceAll("零亿零万", "亿");
		result = result.replaceAll("零万零圆", "万圆");
		result = result.replaceAll("零亿", "亿");
		result = result.replaceAll("零万", "万");
		result = result.replaceAll("零圆", "圆");
		result = result.replaceAll("零零", "零");

		return result;
	}

发布了87 篇原创文章 · 获赞 22 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/gaofenglxx/article/details/60140483