1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java小写金额转大写金额_java转换小写金额为大写金额

java小写金额转大写金额_java转换小写金额为大写金额

时间:2019-12-25 16:45:56

相关推荐

java小写金额转大写金额_java转换小写金额为大写金额

找工作中,遇到一个java金额转换的题目,在网上查找了一些资料,看了不是太容易理解,理解能力不好。在此分享在吸取大神们处理方式的基础上自己整理的一个小程序,希望可以帮助到大家,也是自己的一个笔记。

代码如下:

import java.math.BigDecimal;

public class Convert {

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

static String cashUnitRight[] = { "角", "分", "厘" };

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

public static String convert(BigDecimal money) {

String smoney = money.toString();

try{

if (smoney.indexOf(".") != -1) { //把数值分为整数型和带小数的数值分开处理。

String left = smoney.substring(0, smoney.indexOf("."));

String right = smoney.substring(smoney.indexOf(".") + 1);

String result = convertLeft(left) + convertRight(right);

return result;

} else {

return convertLeft(smoney);

}

}catch(IllegalArgumentException e){

System.out.println(e.getMessage());

System.out.println("请输入转换范围内现金");

return null;

}

}

private static String convertLeft(String left) { //处理整数部分。

int length = left.length(); //根据单位'亿','万','元',把整数部分分为3种情况处理。

if (length <= 4) { //金额在千元以内。

if(length == 1 && Integer.valueOf(left) == 0) //金额为'0'元时的特殊情况。

return "零元";

return convertPart(left, length);

} else if (length <= 8) { //金额在千万元以内。

String part1 = left.substring(0,length - 4);

String part2 = left.substring(length - 4, length);

String result1 = convertPart(part1, length);

String result2 = convertPart(part2, 4);

return result1 + result2;

} else if (length <= 12) { //金额在千亿元以内。

String part1 = left.substring(0, length - 8); //截取单位为'亿'部分数值。

String part2 = left.substring(length - 8, length - 4); //截取单位为'万'部分数值。

String part3 = left.substring(length - 4, length); //截取单位为'元'部分数值。

String result1 = convertPart(part1, length); //转换单位为'亿'部分数值。

String result2 = convertPart(part2, 8); //转换单位为'万'部分数值。

String result3 = convertPart(part3, 4); //转换单位为'元'部分数值。

String result = result1 + result2 + result3;

return result;

} else {

throw new IllegalArgumentException("超出转换数值范围!");

}

}

private static String convertRight(String right) { //处理小数部分。

String result = "";

String number = "";

String unit = "";

int length = right.length();

for (int i = 0; i < length; i++) {

String detail = right.substring(i, i + 1);

int value = Integer.valueOf(detail);

number = upperNumber[value];

unit = cashUnitRight[i];

result = result.concat(number).concat(unit);

}

result = result.replaceAll("零角", "").replaceAll("零分", "").replaceAll("零厘", "");

return result;

}

private static String convertPart(String part, int position) {

String result = "";

String number = "";

String unit = "";

if(part.equals("0000") && position == 8) //用于排除单位为'万'时,四位数值均为'0'的情况。

return "";

for (int i = 0; i < part.length(); i++) {

int value = Integer.valueOf(String.valueOf(part.charAt(i)));

number = upperNumber[value];

unit = cashUnitLeft[position - 1 - i];

result = result.concat(number).concat(unit);

}

result = result.replaceAll("零仟", "零").replaceAll("零佰", "零") //把单位'亿','万','元'放到最后替换。

.replaceAll("零拾", "零").replaceAll("零零", "零")

.replaceAll("零零", "零").replaceAll("零亿", "亿")

.replaceAll("零万", "万").replaceAll("零元", "元");

// result = result.replaceAll("零仟", "零");

// result = result.replaceAll("零佰", "零");

// result = result.replaceAll("零拾", "零");

// result = result.replaceAll("零零", "零");

// result = result.replaceAll("零零", "零");

// result = result.replaceAll("零亿", "亿");

// result = result.replaceAll("零万", "万");

// result = result.replaceAll("零元", "元");

System.out.println(result);

return result;

}

public static void main(String[] args) {

BigDecimal money = new BigDecimal("123456789123.789");

System.out.println("Before convert:" + money);

String result = convert(money);

System.out.println("After convert:" + result);

}

}

运行结果

Before convert:123456789123.789壹仟贰佰弎拾肆亿

伍仟陆佰柒拾捌万

玖仟壹佰贰拾弎元

After convert:壹仟贰佰弎拾肆亿伍仟陆佰柒拾捌万玖仟壹佰贰拾弎元柒角捌分玖厘

目前程序可以做一些金额大小写的转换,边写边改,自己测了一下常见的情况,可以正常转换。

思路不是太好,欢迎大家批评指教。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。