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 = String();
try{
if (smoney.indexOf(".") != -1) { //把数值分为整数型和带⼩数的数值分开处理。
String left = smoney.substring(0, smoney.indexOf("."));
bigdecimal转换为integerString right = smoney.substring(smoney.indexOf(".") + 1);
String result = convertLeft(left) + convertRight(right);
return result;
} else {
return convertLeft(smoney);
}
}catch(IllegalArgumentException e){
System.out.Message());
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 = at(number).concat(unit);
}
result = placeAll("零⾓", "").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 = at(number).concat(unit);
}
result = placeAll("零仟", "零").replaceAll("零佰", "零") //把单位'亿','万','元'放到最后替换。
.replaceAll("零拾", "零").replaceAll("零零", "零")
.replaceAll("零零", "零").replaceAll("零亿", "亿")
.replaceAll("零万", "万").replaceAll("零元", "元");
// result = placeAll("零仟", "零");
// result = placeAll("零佰", "零");
// result = placeAll("零拾", "零");
// result = placeAll("零零", "零");
// result = placeAll("零零", "零");
// result = placeAll("零亿", "亿");
/
/ result = placeAll("零万", "万");
// result = placeAll("零元", "元");
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:壹仟贰佰弎拾肆亿伍仟陆佰柒拾捌万玖仟壹佰贰拾弎元柒⾓捌分玖厘
⽬前程序可以做⼀些⾦额⼤⼩写的转换,边写边改,⾃⼰测了⼀下常见的情况,可以正常转换。 思路不是太好,欢迎⼤家批评指教。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论