packagetheTest;public classNumToRmb {private String[] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};private String[] unitArr={"仟","佰","拾"};/*** 把一个浮点数分解成整数部分和小数部分字符串
*@paramnum 需要被分解的浮点数
*@return分解出来的整数部分和小数部分,第1个数组元素是整数部分,第2个数组元素是小数部分。*/
private String[] divide(doublenum){//将一个浮点数强制转换为long型,即得到它的整数部分
long zheng=(long)num;//浮点数减去整数部分,得到小数部分,小数部分乘以100取整得到两位小数
long xiao=Math.round((num-zheng)*100);//这里使用两种方法将整数转换为字符串
return new String[]{String.valueOf(zheng),xiao+""};
}/*** 将整数分成4个数字为一组的字符串处理,转化成大写数字再将它们连接起来,得到最终的人民币读法
*@paramnum 需要被转化为大写数字的浮点数
*@return返回整个数字的人民币读法*/
private String conHanStr(doublenum){//存储整数结果、小数结果
String resZheng="";
String resXiao="";//存储最终结果
String result="";//分别存储整数部分和小数部分字符串
String zhengStr=divide(num)[0];
String xiaoStr=divide(num)[1];/*小数部分的处理*/
if(xiaoStr.length()==1){
xiaoStr="0"+xiaoStr;
}
resXiao=xiao2Han(xiaoStr);/*整数部分的处理*/
//记录字符串个数,是第几个数组
int countArr=0;
String tempStr="";//记录位数
int countNum=0;for(int i=zhengStr.length()-1;i>=0;i--){
countNum++;
tempStr=zhengStr.charAt(i)+tempStr;if(i-1<0){//i已经是最后一个数字,不够的位,补0
while(tempStr.length()<4){
tempStr="0"+tempStr;
}
countArr++;
resZheng=zheng2Han(countArr,tempStr)+" "+resZheng;
}else{if(countNum==4){
countArr++;
resZheng=zheng2Han(countArr,tempStr)+" "+resZheng;
countNum=0;
tempStr="";
}
}
}//去掉开头的零
if(resZheng.charAt(0)==‘零‘){
resZheng=resZheng.substring(1,resZheng.length());
}/*整数和小数的连接*/
//表示整数部分为0
if(resZheng.charAt(0)==‘元‘){
resZheng="零"+resZheng;
}
result=resZheng+resXiao;returnresult;
}/*** 每个4位的整数组转化为大写的数字
*@paramcount 记录是第几个数组(1-3)
*@paramstr 需要被转换的数组
*@return返回该数组人民币读法*/
private String zheng2Han(intcount,String str){
String result="";for(int j=0;j<4;j++){int tempNum=str.charAt(j)-48;if(tempNum!=0){if(j!=3){
result+=hanArr[tempNum]+unitArr[j];
}else{
result+=hanArr[tempNum];
}
}else{if((j-1<0)||(str.charAt(j-1)-48!=0)){
result+=hanArr[tempNum];
}
}
}//去掉末尾的零
if(result.charAt(result.length()-1)==‘零‘){
result=result.substring(0, result.length()-1);
}//去零之后添加“亿、万、元、角、分”。
switch(count){case 1:
result+="元";break;case 2:
result+="万";break;case 3:
result+="亿";break;default:
System.out.println("仅支持不大于9999,9999,9999.99的数字!");return "";
}returnresult;
}/*** 小数转化为大写的数字
*@paramstr 需要被转换的数组
*@return返回该小数人民币读法*/
privateString xiao2Han(String str){
String result="";if(!str.equals("00")){for(int i=0;i<2;i++){int tempNum=str.charAt(i)-48;if((tempNum!=0)&&(i==0)){
result+=hanArr[tempNum]+"角";
}if((tempNum!=0)&&(i==1)){
result+=hanArr[tempNum]+"分";
}
}
}returnresult;
}/*** 主函数
*@paramargs*/
public static voidmain(String[] args) {
NumToRmb nr=newNumToRmb();
System.out.println(nr.conHanStr((double)12030060078.95));
}
}