写一个将钱转换为大写中文字的方法

今天做了一个打印,根据需求要将钱数转化为大写。研究很久写了下满的方法。

package com.kayakwise.fnc.base.util;
import java.math.BigDecimal;
import java.util.Date;

public class MoneyTools {

	public static final String emptyArrayString[] = new String[0];
	public static final Integer emptyArrayInteger[] = new Integer[0];
	public static final BigDecimal ZERO_E_BIGDECIMAL = new BigDecimal("0E-10");
	public static final Short zeroShort = Short.valueOf((short)0);
	public static final Date emptyDate = new Date(0xfffffffffe488c00L);
	private static final String digit[] = {
		"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"
	};
	private static final String fraction[] = {
		"角", "分"
	};
	private static final String digit_unit1[] = {
		"", "拾", "佰", "仟"
	};
	private static final String digit_unit2[] = {
		"元", "万", "亿"
	};
	
	private static String gbDigit(char num)
	{
		return digit[num - 48];
	}
	
	public static String moneyGb(String money){
		StringBuffer sb_f = new StringBuffer();
		StringBuffer sb_b = new StringBuffer();
		char mchr[] = money.toCharArray();
		int idx = money.indexOf('.');
		int i;
		if (idx >= 0 && idx < mchr.length - 1)
			for (i = 0; i < 2; i++)
			{
				if (i + idx + 1 >= mchr.length)
					break;
				char c = mchr[i + idx + 1];
				if (c != '0')
					sb_b.append(gbDigit(c)).append(fraction[i]);
			}

		if (idx == -1)
			idx = mchr.length;
		i = 0;
		int un1 = 0;
		int un2 = 0;
		for (; i < idx; i++)
		{
			char c = mchr[i];
			un1 = ((idx - i) + 3) % digit_unit1.length;
			un2 = (int)Math.floor((idx - i) / digit_unit1.length);
			if (c == '0')
			{
				if (sb_f.length() > 0 && sb_f.lastIndexOf("零") != sb_f.length() - 1)
					sb_f.append(gbDigit(c));
			} else
			{
				sb_f.append((new StringBuilder(String.valueOf(gbDigit(c)))).append(digit_unit1[un1]).toString());
			}
			if (sb_f.length() > 0 && un1 == 0)
				if (sb_f.lastIndexOf("零") == sb_f.length() - 1)
					sb_f.replace(sb_f.length() - 1, sb_f.length(), digit_unit2[un2]);
				else
					sb_f.append(digit_unit2[un2]);
		}

		if (sb_f.length() == 0)
			sb_f.append("零元");
		if (sb_b.length() == 0)
			sb_b.append("整");
		
		return sb_f.append(sb_b).toString().replace("亿万", "亿");
	}
	
	/**
	 * 转换大写金额
	 * @param money
	 * @return
	 */
	public static String moneyGb(BigDecimal money){
		if (Tools.objIsEmpty(money)){
			return "";
		}
		return moneyGb(money.toString());
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值