张晨的个人博客

Java把数字转换成中文大写数字

张晨的个人博客2014-06-15Java技术 2038 0A+A-
package com.chen.test;

public class TestChinese {
	
	public static void main(String[] args) {
		System.out.println(daxie_bf(2111112.91));
//输出结果-->贰佰壹拾壹万壹仟壹佰壹拾贰元玖角壹分
	}
	
	
public static String daxie_bf(double amount){
boolean negative = false;
if (amount < 0.0D){
	negative = true;
	amount *= -1D;
}
long temp = Math.round(amount * 100D);
int numFen = (int)(temp % 10L);
temp /= 10L;
int numJiao = (int)(temp % 10L);
temp /= 10L;
int parts[] = new int[20];
int numParts = 0;
for (int i = 0; temp != 0L; i++){
	int part = (int)(temp % 10000L);
	parts[i] = part;
	numParts++;
	temp /= 10000L;
}

	boolean beforeWanIsZero = true;
	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 = (new StringBuilder("亿")).append(
	chineseStr).toString();
	else
	if ("".equals(partChinese) && !beforeWanIsZero){
		chineseStr = (new StringBuilder("零")).append(
			chineseStr).toString();
	} else{
		if (parts[i - 1] < 1000 && parts[i - 1] > 0)
		chineseStr = (new StringBuilder("零")).append(
			chineseStr).toString();
		chineseStr = (new StringBuilder("万")).append(
			chineseStr).toString();
	}
chineseStr = (new StringBuilder(
	String.valueOf(partChinese))).append(
	chineseStr).toString();
}

if ("".equals(chineseStr))
	chineseStr = chineseDigits[0];
else
if (negative)
	chineseStr = (new StringBuilder("负")).append(
	chineseStr).toString();
chineseStr = (new StringBuilder(
	String.valueOf(chineseStr))).append("元").toString();
if (numFen == 0 && numJiao == 0)
	chineseStr = (new StringBuilder(
	String.valueOf(chineseStr))).append("整").toString();
else
if (numFen == 0)
	chineseStr = (new StringBuilder(
	String.valueOf(chineseStr))).append(
	chineseDigits[numJiao]).append("角").toString();
else
if (numJiao == 0)
	chineseStr = (new StringBuilder(
	String.valueOf(chineseStr))).append("零").append(
	chineseDigits[numFen]).append("分").toString();
else
	chineseStr = (new StringBuilder(
	String.valueOf(chineseStr))).append(
	chineseDigits[numJiao]).append("角").append(
	chineseDigits[numFen]).append("分").toString();
return chineseStr;
}
	
	public static String chineseDigits[] = {
"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"
	};
	
private static String partTranslate(int amountPart){
if (amountPart < 0 || amountPart > 0x5f5e100)
	throw new IllegalArgumentException(
	"参数必须是大于等于 0,小于 100000000 的整数!");
String units[] = {
	"", "拾", "佰", "仟"
};
int temp = amountPart;
String amountStr = (new Integer(amountPart)).toString();
int amountStrLength = amountStr.length();
boolean lastIsZero = true;
String chineseStr = "";
for (int i = 0; i < amountStrLength; i++){
	if (temp == 0)
		break;
	int digit = temp % 10;
	if (digit == 0){
	if (!lastIsZero)
		chineseStr = (new StringBuilder("零")
		).append(chineseStr).toString();
	lastIsZero = true;
	} else{
	chineseStr = (new StringBuilder(
		String.valueOf(chineseDigits[digit]))
		).append(units[i]).append(chineseStr).toString();
	lastIsZero = false;
	}
	temp /= 10;
}

return chineseStr;
}

}

 

文章关键词
Java中文大写数字
发表评论