java编写金额小写转大写

在银行系统中,经常可以看到金额小写转大写的模块,下面是在线闲来无事写的一个小程序,可以把金额从小写转大写,其实小写转大写需要注意一下几个地方:

  • 连续几个零的处理,例如10000,100001,10010010
  • 萬和亿的处理,例如三千两百万,五万亿

import java.util.Scanner;


public class ChangeMoney {


	private Scanner					scanner			= new Scanner(System.in);
	/**
	 * 金额的最大值
	 */
	public static final Long		DIGT_VALUE_MAX	= 9999999999999L;
	/**
	 * 金额的最小值
	 */
	public static final Long		DIGT_VALUE_MIN	= 0L;
	/**
	 * 输入提示
	 */
	public static final String		SCANNER_TIP		= "请输入一个整数的金额数值(" + DIGT_VALUE_MIN + "~" + DIGT_VALUE_MAX + "),退出请直接输入q,:";
	/**
	 * 输入错误提示
	 */
	public static final String		SCANNER_ERROR	= "输入有误,请重新输入(退出请直接输入q):";


	/**
	 * 终止输入命令(不区分大小写)
	 */
	public static final String		QUET_COMMONT	= "q";


	/**
	 * 输入错误允许次数
	 */
	public static final int			ERROR_LIMIT		= 3;


	/**
	 * 钱的单位
	 */
	public static final String[]	MONEY_UNIT		= { "", "拾", "佰", "仟", "萬", "亿" };


	public static final String[]	DIAT_UPER		= {"零", "壹", "贰", "叁", "肆,", "伍", "陆", "柒", "捌", "玖" };


	public static void main(String[] args) throws Exception {
		ChangeMoney money = new ChangeMoney();
		Long m = money.getDigt();
		System.out.println(money.getUpDigt(m) + "元整");
	}


	/**
	 * 输入整数金额(最多输入错误三次)
	 * 
	 * 
	 * @return 输入的数值,-1表示终止输入
	 */
	public long getDigt() {
		for (int i = 0; i < ERROR_LIMIT; i++) {
			System.out.println(SCANNER_TIP);
			String digt = scanner.nextLine();
			// 终止输入
			if (digt.equalsIgnoreCase(QUET_COMMONT)) {
				break;
			}
			try {
				Long digtLong = Long.parseLong(digt);
				// 有效值判断
				if (digtLong >= DIGT_VALUE_MIN && digtLong <= DIGT_VALUE_MAX) {
					return digtLong;
				}
			} catch (Exception e) {
			}
			System.out.println(SCANNER_ERROR);
		}
		return -1;
	}


	public String getUpDigt(Long digt) {
		String returnNumber = "";
		String digtStr = digt + "";
		boolean zeroFlag = false;
		for (int i = 0; i < digtStr.length(); i++) {
			int length = digtStr.length() - i;
			// 0的判断
			if (digtStr.charAt(i) == '0') {
				if (length == 5) {
					returnNumber += MONEY_UNIT[4];
					zeroFlag = false;
				} else if (length == 9) {
					returnNumber += MONEY_UNIT[5];
					zeroFlag = false;
				} else {
					zeroFlag = true;
				}
				continue;
			}
			if (zeroFlag) {
				returnNumber += DIAT_UPER[0];
			}
			// 输数字
			returnNumber += DIAT_UPER[Integer.parseInt(digtStr.charAt(i) + "")];
			// 输单位
			if (length < 5) {
				returnNumber += MONEY_UNIT[length - 1];
			}else if(length < 9){
				returnNumber += MONEY_UNIT[length - 5];
			}else{
				returnNumber += MONEY_UNIT[length - 9];
			}
			
			if (length == 5) {
				returnNumber += MONEY_UNIT[4];
			} else if (length == 9) {
				returnNumber += MONEY_UNIT[5];
			}
		}
		return returnNumber;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值