您的位置:首页 > 编程语言 > Java开发

java编写金额小写转大写

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

连续几个零的处理,例如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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: