基本思想:
将数字转化为字符串,以小数点为界限拆为:整数,小数点,小数,三各部分,各个部分转换为大写格式,最后拼接在一起。(主要运用了字符串的拆分,替换,转化)
1.导入的包
import java.text.DecimalFormat;
import java.util.Scanner;
2.静态变量
static String[] UNIT1={"","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"};//整数单位数组
static String[] UNIT2={"角","分","厘"};//小数单位数组
3.主函数
public static void main(String args[]){
System.out.println("请输入金额:");
Scanner sca=new Scanner(System.in);
System.out.println(convert(sca.nextDouble()));
}
4.拆分方法:将数字转换为字符串之后拆分
static String convert(double d){
DecimalFormat df=new DecimalFormat("#0.###");//自定义数字字符串的格式
String str=df.format(d);
if(str.indexOf(".")!=-1){//是否存在小数点
String num=str.substring(0, str.indexOf("."));//截取小数点之前的位数
if(num.length()>12){
System.out.println("数字太大,不能完成转换,支持千亿及以下级别的转换");
return "";
}
}else{
if(str.length()>12){
System.out.println("数字太大,不能完成转换,支持千亿及以下级别的转换");
return "";
}
}
String point=null;
if(str.indexOf(".")!=-1){
point="元";
}else{//如果没有小数则是"元整"
point="元整";
}
String result=getInteger(str)+point+getDecimal(str);//输出格式为“整数+小数点+小数”
if(result.startsWith("元")){//当整数是0的情况下,没有“元”
result=result.substring(1,result.length());//将“元”截取掉
}
return result;
}
5.整数部分的转换方法(用到了replaceN()和getNumber()两个方法)
static String getInteger(String str){//得到整数部分大写
if(str.indexOf(".")!=-1){
str=str.substring(0,str.indexOf("."));
}
str=new StringBuffer(str).reverse().toString();//反转的目的在于可以按顺序添加单位
char []s=str.toCharArray();
StringBuffer temp=new StringBuffer();
for(int i=0;i
6.小数部分的转换方法(用到了replaceN()和getNumber()两个方法)
static String getDecimal(String str){//得到小数部分大写
if(str.indexOf(".")==-1){
return "";
}
str=str.substring(str.indexOf('.')+1,str.length());
char[]s=str.toCharArray();//因为小数部分单位从大到小,所以不需要反转
StringBuffer temp=new StringBuffer();
for(int i=0;i
7.替换方法
static String replaceN(String str,String oStr,String nStr){
while(true){
if(str.indexOf(oStr)==-1){//当不包含指定内容则跳出while循环
break;
}
str=str.replaceAll(oStr, nStr);//替换
}
return str;
}
8.得到数字大写的方法
static String getNumber(char i){//得到数字的大写
switch(i){//分支语句
case '0':{return "零";}
case '1':{return "壹";}
case '2':{return "贰";}
case '3':{return "叁";}
case '4':{return "肆";}
case '5':{return "伍";}
case '6':{return "陆";}
case '7':{return "柒";}
case '8':{return "捌";}
case '9':{return "玖";}
default:{return "";}
}
}
测试案例: