public class MoneyUtil { String[] smallNumbers = new String[]{"ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "ELEVEN", "TWELVE", "THIRTEEN", "FOURTEEN", "FIFTEEN", "SIXTEEN", "SEVENTEEN", "EIGHTEEN", "NINETEEN"}; String[] tensNumbers = new String[]{ "", "", "TWENTY", "THIRTY", "FORTY", "FIFTY", "SIXTY", "SEVENTY", "EIGHTY", "NINETY"}; String[] scaleNumers = new String[]{"", "THOUSAND", "MILLION", "BILLION" }; String end = "ONLY"; public static void main(String[] args) { MoneyUtil obj = new MoneyUtil(); System.out.println(obj.transferMoneyToWord("36083.39")); } public String transferMoneyToWord(String money){ double dMoney = Double.parseDouble(money); String[] arrMoney = money.split("\\."); //小数点前 int decimals1 = 0; //小数点后 int decimals2 = 0; //纯小数 if(dMoney < 1){ decimals1 = 0; }else{ decimals1 = Integer.parseInt(arrMoney[0]); } decimals2 = Integer.parseInt(arrMoney[1]); //初始化显示英文为ZERO String combined1 = smallNumbers[0]; String combined2 = smallNumbers[0]; if(decimals1 != 0){ int[] digitGroups = new int[]{0,0,0,0}; ////将金额拆分成4段,每段放3位数,即:XXX,XXX,XXX,XXX。最大仅支持到Billion, for(int i=0;i<4;i++){ digitGroups[i] = decimals1%1000; decimals1 = decimals1/1000; } String[] groupText = new String[]{"","","",""}; //处理每段的金额转英文,百位+十位+个位 for(int i=0;i<4;i++){ int hundreds = digitGroups[i]/100; int tensUnits = digitGroups[i]%100; //百位 if(hundreds!=0){ groupText[i] = groupText[i] + smallNumbers[hundreds] + " HUNDRED"; if(tensUnits!=0){ groupText[i] = groupText[i] + " AND "; } } //十位和个位 int tens = tensUnits/10; int units = tensUnits%10; if(tens>=2){//十位大于等于20 groupText[i] = groupText[i] + tensNumbers[tens]; if(units!=0){ groupText[i] = groupText[i] + " " + smallNumbers[units]; } }else if(tens!=0){//十位和个位,小于20的情况 groupText[i] = groupText[i] + smallNumbers[tens] ; } } //金额的个十百位赋值到combined combined1 = groupText[0]; //将金额排除个十百位以外,余下的3段英文数字,加上千位分隔符英文单词,Thousand/Million/Billion for(int i=1;i<4;i++){ if (digitGroups[i]!=0){ String prefix = groupText[i] + " " + scaleNumers[i]; //A:组合Thousand 和Billion if (combined1.length()!=0){ //如果金额的百位+十位+个位非0,则在后面加上空格 prefix = prefix+ " "; } combined1 = prefix + combined1; //再连接 A+B } } } if(decimals2!=0){ //十位和个位 int tens = decimals2/10; int units = decimals2%10; if(decimals2 >=20){ combined2 = "CENTS " + tensNumbers[tens]; if(units!=0){ combined2 = combined2 + " " + smallNumbers[units]; } }else if(decimals2 > 1){//19到2之间 combined2 = "CENTS " + smallNumbers[decimals2]; }else{ combined2 = "CENT " + smallNumbers[decimals2]; } } if(!combined1.equals("ZERO")){ if(!combined2.equals("ZERO")){ return combined1 + " " + combined2 + " " + end; }else{ return combined1+ " " + end; } }else if(!combined2.equals("ZERO")){ return combined2 + " " + end; }else{ return "ZERO"; } } }