/*
* 数字汉化,最大到千兆,即16位数字
* @param lnum
* @author tnt
* @return
*/
public static String getChineseNum(long lnum) {
String tmpNum = String.valueOf(lnum);
if (tmpNum.length() > 16) {
return tmpNum;
}
// 先把数字调转过来
String num = "";
String[] tmpNumArr = tmpNum.split("");
for (int i = tmpNum.length() - 1; i >= 0; i--) {
num = num + tmpNumArr[i];
}
// 级别单位
String[] sctArr = new String[] { "", "万", "亿", "兆" };
String[] piceArr = new String[] { "", "十", "百", "千" };
// 数字
String[] hzArr = new String[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
// 每四个数字跨一个级别
String[] digArr = new String[4];
String[] itemArr = num.split("");
int index = 0;
String tmpDig = "";
for (int i = 0; i < itemArr.length; i++) {
if (i % 4 == 0 && i != 0) {
index += 1;
tmpDig = "";
}
tmpDig += itemArr[i];
// 每次重新赋值
digArr[index] = tmpDig;
}
String strResHz = "";
for (int i = 0; i < digArr.length; i++) {
String strHz = "";
String digNum = digArr[i];
if (digNum == null) {
continue;
}
String[] tmpDigArr = digNum.split("");
// 是否展示显示汉字0
boolean showZero = false;
for (int k = 0; k < digNum.length(); k++) {
int thisNm = Integer.valueOf(tmpDigArr[k]);
String thisHz = hzArr[thisNm];
String thisPice = piceArr[k];
if (k > 0) {
// 是个位之上的,需要加单位了,但如果是0,则不需要加单位
if (thisNm != 0) {
showZero = true;
if (thisPice.contains("十") && thisNm == 1 && k == 3) {
strHz = thisPice + strHz;
} else {
strHz = thisHz + thisPice + strHz;
}
} else {
// 连续的0,如果上一个也是0,则不需要再加0了
if (Integer.valueOf(tmpDigArr[k - 1]) != 0 && showZero) {
strHz = thisHz + strHz;
}
}
} else {
if (thisNm != 0) {
strHz = thisHz;
showZero = true;
}
}
}
strResHz = strHz + (showZero ? sctArr[i] : "") + strResHz;
}
return strResHz;
}
java数字换成汉字(千兆,最大支持16位数字)
最新推荐文章于 2024-04-23 18:52:22 发布