public static String getChineseCurrencyString(String number) {
try {
new Double(number);
} catch (java.lang.NumberFormatException e) {
return "Not a Formatted Float";
}
try {
String result = "";
String value = number;
boolean bHasDot = false;
int dotIndex = value.indexOf('.');
if (dotIndex == -1)
dotIndex = value.length();
else
bHasDot = true;
String beforeDot = value.substring(0, dotIndex).trim();
String afterDot = value.substring(dotIndex);
int len = 0;
// before dot
len = beforeDot.length();
char unit[] = { '元', '万', '亿', '万' };
char subunit[] = { '拾', '佰', '仟' };
int i = 0, j = 0, k = 0; // j is use to subunit,k is use to unit
char oldC = '3';
char zero = '零';
char cc = '0';
result = unit[0] + result;
boolean oldHasN = false;
boolean hasN = false;
boolean allZero = true;
for (i = 0; i < len; i++) {
if (j == 0 && i != 0) {
if (!hasN) {
if ((k % 2) == 0) {
result = result.substring(1);
}
} else {
if (oldC == '0')
result = zero + result;
}
result = unit[k] + result;
// oldC = '3';
oldHasN = hasN;
hasN = false;
}
cc = beforeDot.charAt(len - i - 1);
if (oldC == '0' && cc != oldC) {
if (hasN)
result = zero + result;
}
if (cc != '0') {
if (j != 0)
result = subunit[j - 1] + result;
char dig = '0';
switch (cc) {
case '1':
dig = '壹';
break;
case '2':
dig = '贰';
break;
case '3':
dig = '叁';
break;
case '4':
dig = '肆';
break;
case '5':
dig = '伍';
break;
case '6':
dig = '陆';
break;
case '7':
dig = '柒';
break;
case '8':
dig = '捌';
break;
case '9':
dig = '玖';
break;
}
if (dig == '0')
return "err";
hasN = true;
allZero = false;
result = dig + result;
}
oldC = cc;
j++;
if (j == 4) {
k++;
j = 0;
}
}
if (allZero) {
result = "零元";
} else {
int bb = 0;
if (!hasN) {
bb++;
if (!oldHasN) {
bb++;
}
}
if (bb != 0)
result = result.substring(bb);
if (result.charAt(0) == '零')
result = result.substring(1);
}
// after dot
if (bHasDot) {
afterDot = afterDot.substring(1).trim();
len = afterDot.length();
char[] corn;
corn = new char[2];
char cornunit[] = { '角', '分' };
//int n = 0; // j is use to subunit,k is use to unit
char dig = '0';
corn[0] = afterDot.charAt(0);
if (len > 1)
corn[1] = afterDot.charAt(1);
else
corn[1] = '0';
if ((corn[0] == '0') && (corn[1] == '0'))
return result += '整';
else {
if (allZero)
result = "";
}
for (i = 0; i < 2; i++) {
char curchar;
curchar = corn[i];
switch (curchar) {
case '1':
dig = '壹';
break;
case '2':
dig = '贰';
break;
case '3':
dig = '叁';
break;
case '4':
dig = '肆';
break;
case '5':
dig = '伍';
break;
case '6':
dig = '陆';
break;
case '7':
dig = '柒';
break;
case '8':
dig = '捌';
break;
case '9':
dig = '玖';
break;
case '0':
dig = zero;
break;
}
if (dig == '0')
return "err";
result += dig;
if (i == 0) {
if (curchar != '0')
result += cornunit[0];
else if (allZero)
result = "";
}
if (i == 1)
result += cornunit[1];
}
} else {
result += "整";
}
return result;
} catch (Exception e) {
return "err input";
}
}
try {
new Double(number);
} catch (java.lang.NumberFormatException e) {
return "Not a Formatted Float";
}
try {
String result = "";
String value = number;
boolean bHasDot = false;
int dotIndex = value.indexOf('.');
if (dotIndex == -1)
dotIndex = value.length();
else
bHasDot = true;
String beforeDot = value.substring(0, dotIndex).trim();
String afterDot = value.substring(dotIndex);
int len = 0;
// before dot
len = beforeDot.length();
char unit[] = { '元', '万', '亿', '万' };
char subunit[] = { '拾', '佰', '仟' };
int i = 0, j = 0, k = 0; // j is use to subunit,k is use to unit
char oldC = '3';
char zero = '零';
char cc = '0';
result = unit[0] + result;
boolean oldHasN = false;
boolean hasN = false;
boolean allZero = true;
for (i = 0; i < len; i++) {
if (j == 0 && i != 0) {
if (!hasN) {
if ((k % 2) == 0) {
result = result.substring(1);
}
} else {
if (oldC == '0')
result = zero + result;
}
result = unit[k] + result;
// oldC = '3';
oldHasN = hasN;
hasN = false;
}
cc = beforeDot.charAt(len - i - 1);
if (oldC == '0' && cc != oldC) {
if (hasN)
result = zero + result;
}
if (cc != '0') {
if (j != 0)
result = subunit[j - 1] + result;
char dig = '0';
switch (cc) {
case '1':
dig = '壹';
break;
case '2':
dig = '贰';
break;
case '3':
dig = '叁';
break;
case '4':
dig = '肆';
break;
case '5':
dig = '伍';
break;
case '6':
dig = '陆';
break;
case '7':
dig = '柒';
break;
case '8':
dig = '捌';
break;
case '9':
dig = '玖';
break;
}
if (dig == '0')
return "err";
hasN = true;
allZero = false;
result = dig + result;
}
oldC = cc;
j++;
if (j == 4) {
k++;
j = 0;
}
}
if (allZero) {
result = "零元";
} else {
int bb = 0;
if (!hasN) {
bb++;
if (!oldHasN) {
bb++;
}
}
if (bb != 0)
result = result.substring(bb);
if (result.charAt(0) == '零')
result = result.substring(1);
}
// after dot
if (bHasDot) {
afterDot = afterDot.substring(1).trim();
len = afterDot.length();
char[] corn;
corn = new char[2];
char cornunit[] = { '角', '分' };
//int n = 0; // j is use to subunit,k is use to unit
char dig = '0';
corn[0] = afterDot.charAt(0);
if (len > 1)
corn[1] = afterDot.charAt(1);
else
corn[1] = '0';
if ((corn[0] == '0') && (corn[1] == '0'))
return result += '整';
else {
if (allZero)
result = "";
}
for (i = 0; i < 2; i++) {
char curchar;
curchar = corn[i];
switch (curchar) {
case '1':
dig = '壹';
break;
case '2':
dig = '贰';
break;
case '3':
dig = '叁';
break;
case '4':
dig = '肆';
break;
case '5':
dig = '伍';
break;
case '6':
dig = '陆';
break;
case '7':
dig = '柒';
break;
case '8':
dig = '捌';
break;
case '9':
dig = '玖';
break;
case '0':
dig = zero;
break;
}
if (dig == '0')
return "err";
result += dig;
if (i == 0) {
if (curchar != '0')
result += cornunit[0];
else if (allZero)
result = "";
}
if (i == 1)
result += cornunit[1];
}
} else {
result += "整";
}
return result;
} catch (Exception e) {
return "err input";
}
}
转载于:https://blog.51cto.com/long5257/93878