package com.member.struts.util;
import java.math.BigDecimal;
public class AmountChange2RMB {
private static String bigLetter[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆",
"柒", "捌", "玖" };
private static String unit[] = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟",
"亿", "拾", "佰", "仟", "万" };
private static String unitSmall[] = { "分", "角" };
/**
*
* @param args
*/
public static void main(String[] args) {
String[] testStrs = { "1234567888888.100"/* 大十进制数 */,
"1001"/* 没有小数,且含相邻的两个零 */, "101005.1"/*零在单位所处的位置*/, "1010"/*零在元位*/ };
System.out.println(new BigDecimal(testStrs[2]).toString());
System.out.println(trans(testStrs[2]));
}
public static String trans(String str) {
BigDecimal dec = check2BigDecimal(str);
if (dec == null)
return null;
str = dec.toPlainString();
String[] sArr = str.split("\\.");
String intOnly = sArr[0];
String smallOnly = "";
if (sArr.length == 2)
smallOnly = sArr[1];
if (smallOnly.length() > 2) {
smallOnly = smallOnly.substring(0, 2);
}
return transInt(intOnly) + transSmall(smallOnly);
}
public static String transInt(String str) {
if ("0".equals(str))
return "";
StringBuffer newS = new StringBuffer();
char[] cArr = str.toCharArray();
for (int i = 0; i < cArr.length; i++) {
String u = unit[cArr.length - i - 1];
int position = "元万亿".indexOf(u);
// 遇到零,特殊处理
if (cArr[i] == '0') {
// 如果零在特殊位置上:比如个位,万位,亿位
if (position >= 0) {
// 如果零在个位:需要加上单位“元”
if (position == 0) {
newS.append(unit[cArr.length - i - 1]);
continue;
} else {// 如果零不在个位
// 零不在个位,且这个位后,紧跟着一个零:只需要加上单位
if (i < cArr.length - 1 && cArr[i + 1] == '0') {
newS.append(unit[cArr.length - i - 1]);
continue;
} else {// 零不在个位,且这个位后,没有紧跟着一个零:需要加上单位和大写数字(注意次序:单位在前,大写数字在后)
newS.append(unit[cArr.length - i - 1]);
newS.append(bigLetter[cArr[i] - 48]);
continue;
}
}
} else {// 零不在特殊位置上
// 零不在特殊位置上,且这个位后,紧跟着一个零:忽略这个零
if (i < cArr.length - 1 && cArr[i + 1] == '0') {
continue;
}
// 零不在特殊位置上,且这个位后,没有紧跟着一个零:需要加上大写数字
newS.append(bigLetter[cArr[i] - 48]);
continue;
}
}
// 不是零,常规处理
newS.append(bigLetter[cArr[i] - 48]);
newS.append(unit[cArr.length - i - 1]);
}
return newS.toString();
}
public static String transSmall(String str) {
//因为最多精确到分,所有str的长度最多位2
if (str == null || "".equals(str))
return "";
char[] cArr = str.toCharArray();
if (str.indexOf("0") == -1) {//不含有零,常规处理
StringBuffer newS = new StringBuffer();
for (int i = 0; i < cArr.length; i++) {
newS.append(bigLetter[cArr[i] - 48]);
newS.append(unitSmall[cArr.length - i - 1]);
}
return newS.toString();
} else {//含有零,分情况考虑
if (cArr[0] == '0' && cArr[cArr.length == 2 ? 1 : 0] == '0')//两个都为零
return "";
if (cArr[0] == '0' && cArr.length == 2 && cArr[1] != '0')//角位为零,分位不为零
return bigLetter[0] + bigLetter[cArr[1] - 48] + unitSmall[0];
if (cArr[0] != '0' && cArr.length == 2 && cArr[1] == '0')//分位为零,角位不为零
return bigLetter[cArr[0] - 48] + unitSmall[1];
}
return "";
}
public static BigDecimal check2BigDecimal(String str) {
try {
double f = Double.valueOf(str);// 0.0 0.1 -5 ""
if (f < 0)
System.out.println("输入数据小于0,请检查!");
return new BigDecimal(f);
} catch (NumberFormatException e) {
e.printStackTrace();
}
return null;
}
}
分享到:
评论