4.7(5)——人名币转换

代码:

public class 人民币转化 {
public static void main(String[] args) {
double num = 1234567896738476.3345;
String money = "123456789123456789.123456789";
int point = money.indexOf(".");
int len = money.length();
StringBuffer result = new StringBuffer();
// 处理整数部分
int count = point-1;// 记录所计算位数
int flag = 0;
for(int i=0;i<point;i++){
int a = money.charAt(i)-48;
if(a!=0){
if(flag!=0){
result.append("零");
}
result.append(num2CN(a));
result.append(processIntUnit(count));
flag = 0;
}else{
flag++;
}
count--;
}
if(num>1.0){
result.append("元");
}
// 处理小数部分
if(point+1<len){
int a = money.charAt(point+1)-48;
if(a!=0){
result.append(num2CN(a));
result.append(processFloatUnit(-1));// 获取小数部分该位数字的单位
}
}
if(point+2<len){
int a = money.charAt(point+2)-48;
if(a!=0){
result.append(num2CN(a));
result.append(processFloatUnit(-2));// 获取小数部分该位数字的单位
}
}
System.out.print(result.toString());
}


/**
* 将数字转换为对应的中国大写形式
*/
private static String num2CN(int num) {
String cn = "";
switch(num){
case 1:
cn = "壹";
break;
case 2:
cn = "贰";
break;
case 3:
cn = "叁";
break;
case 4:
cn = "肆";
break;
case 5:
cn = "伍";
break;
case 6:
cn = "陆";
break;
case 7:
cn = "柒";
break;
case 8:
cn = "捌";
break;
case 9:
cn = "玖";
break;
}
return cn;
}


/**
* 获取整数部分该位数字的单位
*/
private static String processIntUnit(int num) {
StringBuffer unit = new StringBuffer();
if(num==0){
return unit.toString();
}
int flag = num%8;
switch(flag){
case 7:
unit.append("仟万");
break;
case 6:
unit.append("佰万");
break;
case 5:
unit.append("拾万");
break;
case 4:
unit.append("万");
break;
case 3:
unit.append("仟");
break;
case 2:
unit.append("佰");
break;
case 1:
unit.append("拾");
break;
}
num = num/8;
while(num>0){
unit.append("亿");
num--;
}
return unit.toString();
}


/**
* 获取小数部分该位数字的单位
*/
private static String processFloatUnit(int num) {
String result = "";
switch(num){
case -1:
result="角";
break;
case -2:
result="分";;
break;
}
return result;
}
}

运行结果:


注:

之前使用String.valueOf()将double类型的钱转换为String类型,但当double类型的数值过大时,将采用科学计数法表示,转换过去的String字符串是double的科学记数法表示形式。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值