四位数字转中文金额读法(Java疯狂讲义第4章课后练习)

/*

测试过没什么大问题,就是初学java,判断的部分写的比较复杂,不知道有没有更简单的办法呢?

如有问题还请大家帮忙指正,谢谢啦~

*/

import java.util.Scanner;


public class NumToStr {
// 定义两个字符数组
private String[] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[] unitArr = {"","拾","百","仟"};

//定义拆分方法divide,把浮点数分解成整数部分和小数部分字符串
private String[] divide(double num){
long zheng = (long)num;
long xiao = Math.round((num-zheng)*100);
System.out.println("整数部分是:"+zheng);
System.out.println("小数部分是:"+xiao);
return new String[]{zheng+"",xiao+""};
}

//定义四位整数部分数字符串转汉字的toHanStr方法
private String toHanStr(String numStr){
String result="";
int numlen = numStr.length();
for(int i = 0 ;i < numlen ;i++){
int num = numStr.charAt(i)-48;
// num不等于0,很简单。
if(num!=0){
result += hanArr[num]+unitArr[numlen-1-i];
}else{
// num等于0的情况比较复杂。
if(i==numlen-1){
// 等于0且在最后一个,完全忽略
continue;
}else{
//等于0但不在最后一个,再看前一个是否为0
if(i>0 && numStr.charAt(i-1)-48 ==0){
//如果前一个为0,则完全忽略。
continue;
}else{
//如果前一个不为0,则再判断后面的是否为0,如果全为0,则不读0;如果不全为0,则读一个零
boolean allzero = true;
for(int a = i;a<numlen;a++){
if(numStr.charAt(a)-48 !=0){
allzero = false;
}
}
if(allzero == false){
result += hanArr[num];
}
}
}
}

}
return result;
}

// 定义小数部分数字字符串转汉字的toXiao方法。
private String toXiao(String xiao){
String result = "";
int x = Integer.parseInt(xiao);
if (x!=0){
// int numlen = numStr.length();
// for(int i = 0 ;i < numlen ;i++){
// int num = numStr.charAt(i)-48;
// result += hanArr[num];
// }
if(x>9){
int xiao1 = xiao.charAt(0)-48;
int xiao2 = xiao.charAt(1)-48;
if (xiao1 != 0 && xiao2!=0){
result =result + "点"+hanArr[xiao1]+hanArr[xiao2]+"元";
}else if(xiao2 ==0){
result =result + "点"+hanArr[xiao1]+"元";
}
}else{
result =result + "点零"+hanArr[x]+"元";
}

}else{
result += "元整";}
return result;

}

// 主方法
public static void main(String[] args){
System.out.println("请输入四位数字(只保留小数点后两位):");
Scanner sc = new Scanner(System.in);
double amount = sc.nextDouble();

NumToStr nr = new NumToStr(); // 要调用方法,需要先创建对象。
String[] div = nr.divide(amount);
String result = nr.toHanStr(div[0])+nr.toXiao(div[1]);
System.out.println(result);

sc.close();
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值