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

数字转金额问题(java)

2016-01-18 23:57 211 查看
目前只做到能够处理正整数的情况。负数和带小数的情况后续补充。

转载请注明出处http://www.cnblogs.com/johngerwang/p/5140881.html

package com.wang.money;

public class MoneyFormat {

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

static String unit[] = { "元","拾", "佰", "仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟","万"};

public static void main(String[] args) {
public static void main(String[] args) {
String[] money = { "1", "10", "100", "101", "1101", "1000", "1001", "11001", "11011", "11111", "10001",
"101001", "100101", "1000101", "1000101", "10000101", "100000101" };
for (int i = 0; i < money.length; i++) {
convert(money[i]);
}
}

public static void convert(String money) {
String result = "";
int index = 0;
for (int i = money.length() - 1; i >= 0; i--) {
//字符0的ascii码是48。
result = chinese[money.charAt(i) - 48] + unit[index++] + result;
}
result = adjustZero(result);
System.out.println(result);
}

public static String adjustZero(String money) {
//下面3句是最特殊的,不需要补零的场景,所以先处理。
//一百亿1000 0000 0000 /一切亿10000 0000 0000 的情况:不要写成零亿,所以以(零佰)*零拾零亿作为正则表达式。
money = money.replace("(零佰)*零拾零亿", "亿");
//一百万1000 0000 /一千万10000 0000 的情况:(零佰)*零拾零亿,不要写成零万,所以以(零佰)*零拾零万作为正则表达式。
money = money.replace("(零佰)*零拾零万", "万");
//一千1000/一百100,不要写成零元,所以以"(零佰)*零拾零元"作为正则表达式。
money = money.replace("(零佰)*零拾零元", "元");
//下面3句,因为在元,万,亿级别上都会存在,拾百千,所以优先处理。
//如果是千位上是0,则转成零
money = money.replaceAll("零+仟", "零");
//如果是百位上是0,则转成零。为什么需要+,原因是因为可能上一句千位上的转换带来了一个零。
money = money.replaceAll("零+佰", "零");
//如果是十位上是0,则转成零。为什么需要+,原因是因为可能上一句佰位上的转换带来了一个零。
money = money.replaceAll("零+拾", "零");
//经过上面的转换,可能存在零+亿的情况,所以,需要处理。
money = money.replaceAll("零+亿", "亿");
//经过上面的转换,可能存在零+万的情况,所以,需要处理。
money = money.replaceAll("零+万", "万");
//经过上面的转换,可能存在零+元的情况,所以,需要处理。
money = money.replaceAll("零+元", "元");
//经过上面的转换,只剩下1001这种情况了,所以处理成一个零。
money = money.replaceAll("零+", "零");
//money = money.replaceAll("零+万", "万")处会出现一个异常情况就是万级别上全是0,而亿级别却有数据,那么万也不需要。
money = money.replace("亿万", "亿");
return money;
}
}

结果如下:

壹元

壹拾元

壹佰元

壹佰零壹元

壹仟壹佰零壹元

壹仟元

壹仟零壹元

壹万壹仟零壹元

壹万壹仟零壹拾壹元

壹万壹仟壹佰壹拾壹元

壹万零壹元

壹拾万壹仟零壹元

壹拾万零壹佰零壹元

壹佰万零壹佰零壹元

壹佰万零壹佰零壹元

壹仟万零壹佰零壹元

壹亿零壹佰零壹元
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: