java数字转金额_数字转金额问题(java)

目前只做到能够处理正整数的情况。负数和带小数的情况后续补充。

转载请注明出处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;

}

}

结果如下:

壹元

壹拾元

壹佰元

壹佰零壹元

壹仟壹佰零壹元

壹仟元

壹仟零壹元

壹万壹仟零壹元

壹万壹仟零壹拾壹元

壹万壹仟壹佰壹拾壹元

壹万零壹元

壹拾万壹仟零壹元

壹拾万零壹佰零壹元

壹佰万零壹佰零壹元

壹佰万零壹佰零壹元

壹仟万零壹佰零壹元

壹亿零壹佰零壹元

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值