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程序设计有所帮助。