Java实现数字转成英文的方法
本文实例讲述了Java实现数字转成英文的方法。分享给大家供大家参考。具体分析如下:
英文数词,按3位3位区分
Hundred:100 Thousand:1,000 Million:1,000,000 Billion:1,000,000,000 Trillion:1,000,000,000,000 Quintillion:1,000,000,000,000,000,000 Sextillion:1,000,000,000,000,000,000,000 Nonillion:1,000,000,000,000,000,000,000,000,000,000 Centillion:1followedby303zeros
所以把数字字符串按3位分割,分别解析
publicclassNumUtil{ publicstaticfinalString[]enNum={//基本数词表 "zero","one","tow","three","four","five","six","seven","eight", "nine","ten","eleven","twelve","thirteen","fourteen", "fifteen","sixteen","seventeen","eighteen","nineteen", "twenty","","","","","","","","","","thirty","","","", "","","","","","","fourty","","","","","","","","", "","fifty","","","","","","","","","","sixty","","", "","","","","","","","seventy","","","","","","","", "","","eighty","","","","","","","","","","ninety"}; publicstaticfinalString[]enUnit={"hundred","thousand","million", "billion","trillion","quintillion"};//单位表 publicstaticvoidmain(String[]args){ System.out.println(analyze(1));//测试数据 System.out.println(analyze(21)); System.out.println(analyze(105)); System.out.println(analyze(3250)); System.out.println(analyze(47826)); System.out.println(analyze(56945781)); } publicstaticStringanalyze(longnum){ //long型参数, returnanalyze(String.valueOf(num)); //因为long型有极限,所以以字符串参数方法为主 } publicstaticStringanalyze(Stringnum){ //数字字符串参数 //判断字符串是否为数字 if(!num.matches("\\d+")){ returnString.format("%sisnotnumber",num); } num=num.replaceAll("^[0]*([1-9]*)","$1"); //把字符串前面的0去掉 if(num.length()==0){ //如果长度为0,则原串都是0 returnenNum[0]; }elseif(num.length()>9){ //如果大于9,即大于999999999,题目限制条件 return"toobig"; } //按3位分割分组 intcount=(num.length()%3==0)?num.length()/3 :num.length()/3+1; if(count>enUnit.length){ return"toobig"; }//判断组单位是否超过, //可以根据需求适当追加enUnit String[]group=newString[count]; for(inti=num.length(),j=group.length-1;i>0;i-=3){ group[j--]=num.substring(Math.max(i-3,0),i); } StringBuilderbuf=newStringBuilder();//结果保存 for(inti=0;i<count;i++){//遍历分割的组 intv=Integer.valueOf(group[i]); if(v>=100){//因为按3位分割,所以这里不会有超过999的数 buf.append(enNum[v/100]).append("").append(enUnit[0]) .append(""); v=v%100;//获取百位,并得到百位以后的数 if(v!=0){ buf.append("and"); }//如果百位后的数不为0,则追加and } if(v!=0){//前提是v不为0才作解析 if(v<20||v%10==0){ //如果小于20或10的整数倍,直接取基本数词表的单词 buf.append(enNum[v]).append(""); }else{//否则取10位数词,再取个位数词 buf.append(enNum[v-v%10]).append(""); buf.append(enNum[v%10]).append(""); } if(i!=count-1){//百位以上的组追加相应的单位 buf.append(enUnit[count-1-i]).append(""); } } } returnbuf.toString().trim();//返回值 } }
希望本文所述对大家的java程序设计有所帮助。