今天弄了一个人民币大写转换,用JAVA写的,有没有更好的写法,敬请交流

本文提供了一个Java程序,用于将正整数和小数转换为大写金额表示,包括数字到大写字母的转换、数字分组和单位添加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<a href="http://edu.youkuaiyun.com/heima" target="blank">android培训</a>、<a href="http://edu.youkuaiyun.com/heima" target="blank">java培训</a>、期待与您交流!

import java.math.BigDecimal;

import org.junit.Test;
//本程序正整数转换得比较理想,小数位没怎么弄了,但是比较容易了
public class MoneyConverTest {
private static final String[] STR_NUM = { "零", "壹", "贰", "叁", "肆", "伍",
"陆", "柒", "捌", "玖" };
private static final String[] STR_MON = { "拾", "佰", "仟", "万", "亿", "圆", "整" };
//把数字转换大写字母
public String Money2(Double numb) {
BigDecimal num=BigDecimal.valueOf(numb);
StringBuffer sb = new StringBuffer();
String number = num.toString();
int zheng = number.indexOf(".");
if (zheng == -1) {
sb.append(getZheng(number));
sb.append(STR_MON[5]);
sb.append(STR_MON[6]);
} else {
String str1 = number.substring(0, zheng);
sb.append(getZheng(str1));
sb.append("点");
String str2 = number.substring(zheng + 1);
char[] charnum = str2.toCharArray();
for (int i = 0; i < charnum.length - 1; i++) {
sb.append(converChar(charnum[i]));
}
sb.append(STR_MON[5]);
sb.append(STR_MON[6]);
}

return sb.toString();

}

//把数字,从小数点前起每四位分一节,多的另算,进行转换,加单位
public static String converFour(String num) {
// System.out.println(num.intValue());
StringBuffer sb = new StringBuffer();
char by[] = num.toCharArray();
if (by.length == 1) {
sb.append(converChar(by[0]));
}
if (by.length == 2) {
sb.append(converChar(by[0]));
sb.append(STR_MON[0]);
sb.append(converChar(by[1]));
}
if (by.length == 3) {
if (by[1] == '0' && by[2] == '0') {
sb.append(converChar(by[0]));
sb.append(STR_MON[1]);

} else {
sb.append(converChar(by[0]));
sb.append(STR_MON[1]);
sb.append(converChar(by[1]));
sb.append(STR_MON[0]);
sb.append(converChar(by[2]));
}

}
if (by.length == 4) {
if (by[0] == '0' && by[1] == '0' && by[2] == '0') {
sb.append(converChar(by[3]));
}
if (by[0] == '0' && by[1] == '0' && by[2] != '0') {
sb.append(converChar(by[2]));
sb.append(STR_MON[0]);
sb.append(converChar(by[3]));
}
if (by[0] != '0' && by[1] == '0' && by[2] != '0') {
sb.append(converChar(by[0]));
sb.append(STR_MON[2]);
sb.append(STR_NUM[0]);
sb.append(converChar(by[2]));
sb.append(STR_MON[1]);
sb.append(converChar(by[3]));
}
if (by[0] != '0' && by[1] == '0' && by[2] == '0' && by[3] != '0') {
sb.append(converChar(by[0]));
sb.append(STR_MON[2]);
sb.append(STR_NUM[0]);
sb.append(converChar(by[3]));
} else {
sb.append(converChar(by[0]));
sb.append(STR_MON[2]);
sb.append(converChar(by[1]));
sb.append(STR_MON[1]);
sb.append(converChar(by[2]));
sb.append(STR_MON[0]);
sb.append(converChar(by[3]));
}
}
return sb.toString();

}
//转换1-9的数字为大写
public static String converChar(char by) {
String str = null;
switch (by) {
case '1':
str = STR_NUM[1];
break;
case '2':
str = STR_NUM[2];
break;
case '3':
str = STR_NUM[3];
break;
case '4':
str = STR_NUM[4];
break;
case '5':
str = STR_NUM[5];
break;
case '6':
str = STR_NUM[6];
break;
case '7':
str = STR_NUM[7];
break;
case '8':
str = STR_NUM[8];
break;
case '9':
str = STR_NUM[9];
break;
case '0':
str = STR_NUM[0];
break;
}
return str;
}
//只进行正整数进行转换
public String getZheng(String num) {
StringBuffer sb = new StringBuffer();
int zheng = num.length();
int a = zheng % 4;
int b = zheng / 4;
switch (b) {
case 0:
converFour(num);
break;
case 1:
String str1 = num.substring(0, a);
String str2 = num.substring(a);
if (str1.equals("")) {
sb.append(converFour(str2));
} else {
sb.append(converFour(str1));
sb.append(STR_MON[3]);
sb.append(converFour(str2));
}
;
break;
case 2:
String str3 = num.substring(0, a);
String str4 = num.substring(a, a + 4);
String str5 = num.substring(a + 4);
if (str3.equals("")) {
sb.append(converFour(str4));
sb.append(STR_MON[3]);
sb.append(converFour(str5));
}
sb.append(converFour(str3));
sb.append(STR_MON[4]);
sb.append(converFour(str4));
sb.append(STR_MON[3]);
sb.append(converFour(str5));
;
break;
default:
String str6 = num.substring(0, a);
String str7 = num.substring(a, a + 4);
String str8 = num.substring(a + 4, a + 8);
String str9 = num.substring(a + 8);
if (str6.equals("")) {
sb.append(converFour(str7));
sb.append(STR_MON[4]);
sb.append(converFour(str8));
sb.append(STR_MON[3]);
sb.append(converFour(str9));
}
sb.append(converFour(str6));
sb.append(STR_MON[4] + STR_MON[4]);
sb.append(converFour(str7));
sb.append(STR_MON[4]);
sb.append(converFour(str8));
sb.append(STR_MON[3]);
sb.append(converFour(str9));
;
break;
}
return sb.toString();

}
@Test
public void test(){
String str=new MoneyConverTest().Money2(857443333.5214);
System.out.println(str);



}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值