java数字换成汉字(千兆,最大支持16位数字)

/*
 * 数字汉化,最大到千兆,即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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值