把金额转换为中文汉字表示

/**
 * 把金额转换为汉字表示的数量,小数点后四舍五入保留两位
 * @param amount
 * @return
 */
public static String amountToChinese(double amount) {
    public String[] chineseDigits = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
	if(amount > 99999999999999.99 || amount < -99999999999999.99)
			throw new IllegalArgumentException("参数值超出允许范围 (-99999999999999.99 ~ 99999999999999.99)!");
	boolean negative = false;
	if(amount < 0) {
			negative = true;
			amount = amount * (-1);
		}
	long temp = Math.round(amount * 100);
	int numFen = (int)(temp % 10); // 分
	temp = temp / 10;
	int numJiao = (int)(temp % 10); //角
	temp = temp / 10;
	//temp 目前是金额的整数部分

	int[] parts = new int[20]; // 其中的元素是把原来金额整数部分分割为值在 0~9999 之间的数的各个部分
	int numParts = 0; // 记录把原来金额整数部分分割为了几个部分(每部分都在 0~9999 之间)
	for(int i=0; ; i++) {
			if(temp ==0)
				break;
			int part = (int)(temp % 10000);
			parts[i] = part;
			numParts ++;
			temp = temp / 10000;
	}

	boolean beforeWanIsZero = true; // 标志“万”下面一级是不是 0
	String chineseStr = "";
	for(int i=0; i<numParts; i++) {

		String partChinese = partTranslate(parts[i]);
		if(i % 2 == 0) {
			if("".equals(partChinese))
					beforeWanIsZero = true;
				else
					beforeWanIsZero = false;
			}
			if(i != 0) {
				if(i % 2 == 0)
					chineseStr = "亿" + chineseStr;
				else {
					if("".equals(partChinese) && !beforeWanIsZero)   // 如果“万”对应的 part 为 0,而“万”下面一级不为 0,则不加“万”,而加“零”
						chineseStr = "零" + chineseStr;
					else {
						if(parts[i-1] < 1000 && parts[i-1] > 0) // 如果"万"的部分不为 0, 而"万"前面的部分小于 1000 大于 0, 则万后面应该跟“零”
							chineseStr = "零" + chineseStr;
						chineseStr = "万" + chineseStr;
					}
				}
			}
			chineseStr = partChinese + chineseStr;
	}
	if("".equals(chineseStr))  // 整数部分为 0, 则表达为"零元"
			chineseStr = chineseDigits[0];
	else if(negative) // 整数部分不为 0, 并且原金额为负数
			chineseStr = "负" + chineseStr;

	chineseStr = chineseStr + "元";

	if(numFen == 0 && numJiao == 0) {
			chineseStr = chineseStr + "整";
	}
	else if(numFen == 0) { // 0 分,角数不为 0
		chineseStr = chineseStr + chineseDigits[numJiao] + "角";
	}
	else { // “分”数不为 0
		if(numJiao == 0)
			chineseStr = chineseStr + "零" + chineseDigits[numFen] + "分";
	    else
		    chineseStr = chineseStr + chineseDigits[numJiao] + "角" + chineseDigits[numFen] + "分";
	}
	return chineseStr;
}

测试类: 

	public static void main(String[] args) {
		System.out.println(amountToChinese(123.1));
	}

执行结果:

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

猜你喜欢

转载自blog.csdn.net/shenju2011/article/details/103816506