Java 金额转换

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;


public class MoneyToChinese {

	private static String[] digit = { "", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万",
			"亿", "拾亿", "佰亿", "仟亿", "万亿" };
	private static final String FEN ="分";
	private static final String JIAO ="角";
	private static final String YUAN ="圆";
	private static final String ZHENG ="整";
	
	
	public static void main(String[] args) {
		
		System.out.println(getMoneyString(1269854896));
	}
	
	
	/**
	 * 取得数字对应的中文
	 * 
	 * @param money
	 * @return
	 */
	public static String getMoneyString(double money) {
		// 将字符串转为为BigDecimal格式
		BigDecimal b = new BigDecimal(String.valueOf(money));
		// 设置精度为2,小数点后2位
		String strMoney = "" + b.setScale(2, BigDecimal.ROUND_UNNECESSARY);
		// 按小数点分为 整数 和 小数 两部分
		String[] amt = strMoney.split("\\.");
		// 调用函数获取 元 和 小数 部分的字符串
		strMoney = getYuan(amt[0]) + YUAN + getJIAOFEN(amt[1]);
		// 返回最终得到的字符串
		return strMoney;
	}

	
	
	/**
	 * 得到元的部分
	 * 
	 * @param s
	 * @return
	 */
	public static String getYuan(String s) {
		char[] c = s.toCharArray();
		StringBuffer chSb = new StringBuffer();
		int len = c.length;
		List list = new ArrayList();
		String d = "";
		for (int i = 0; i < c.length; i++) {
			// 如果有几个0挨在一起时, 只显示一个零即可
			if (i > 0 && c[i] == '0' && c[i] == c[i - 1]) {
				--len;
				continue;
			}
			// 得到数字对应的中文
			chSb.append(getChinese(c[i]));

			// 非零时, 显示是几佰, 还是几仟
			if (!getChinese(c[i]).equals("零")) {
				d = digit[--len];
				list.add(d);// 当数字中有万和十万时, 要去掉十万
				chSb.append(d);
			} else {
				--len; // 如果是0则不取位数
			}
		}
		String chStr = chSb.toString();
		// 如果同时包含有万和十万, 则将十万中的万去掉
		if (list.contains("万") && list.contains("拾万")) {
			chStr = chStr.replaceAll("拾万", "拾");
		}
		if (list.contains("万") && list.contains("佰万")) {
			chStr = chStr.replaceAll("佰万", "佰");
		}
		if (list.contains("万") && list.contains("仟万")) {
			chStr = chStr.replaceAll("仟万", "仟");
		}
		// 如果同时包含亿和十亿, 则将十亿中的亿字去掉
		if (list.contains("亿") && list.contains("拾亿")) {
			chStr = chStr.replaceAll("拾亿", "拾");
		}
		if (list.contains("亿") && list.contains("佰亿")) {
			chStr = chStr.replaceAll("佰亿", "佰");
		}
		if (list.contains("亿") && list.contains("仟亿")) {
			chStr = chStr.replaceAll("仟亿", "仟");
		}
		if (list.contains("亿") && list.contains("万亿")) {
			chStr = chStr.replaceAll("万亿", "万");
		}
		// 如果最后一位是 0, 则去掉
		if ((chSb.charAt(chSb.length() - 1)) == '零') {
			chStr = chStr.substring(0, chStr.length() - 1);
		}
		return chStr;
	}

	
	/**
	 * 分角转换为字符串  
	 *     例: 25 2角5分   
	 *         02 零2分   
	 *         50 5角
	 *         00  整
	 *         0   整
	 *         2   整
	 * @param FENJIAO
	 * @return
	 */
	private static String getJIAOFEN(String FENJIAO){
		// 分角字符串转为为字符数组
		char[] ch = FENJIAO.toCharArray();
		// 按长度为0,为1,为2 来区分。
		if(ch.length==0){
			return ZHENG;
		}else if(ch.length==1){
			if(ch[0]=='0'){
				return ZHENG;
			}else{
				return getChinese(ch[0])+JIAO;
			}
		}else{
			if(ch[0]=='0'&&ch[1]=='0'){
				return ZHENG;
			}else if(ch[0]=='0'&&ch[1]!='0'){
				return getChinese(ch[0])+getChinese(ch[1])+FEN;
			}else if(ch[0]!='0'&&ch[1]=='0'){
				return getChinese(ch[0])+JIAO;
			}else{
				return getChinese(ch[0])+JIAO+getChinese(ch[1])+FEN;
			}
		}
	}
	
	
	
	/**
	 * 取得数字对应的中文
	 * @param i
	 * @return
	 */
	private static String getChinese(char i) {
		String ch = "";
		switch (i) {
		case '0':
			ch = "零";
			break;
		case '1':
			ch = "壹";
			break;
		case '2':
			ch = "贰";
			break;
		case '3':
			ch = "叁";
			break;
		case '4':
			ch = "肆";
			break;
		case '5':
			ch = "伍";
			break;
		case '6':
			ch = "陆";
			break;
		case '7':
			ch = "柒";
			break;
		case '8':
			ch = "捌";
			break;
		case '9':
			ch = "玖";
			break;
		}
		return ch;
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值