要求如下,先到先得。 需要原创! 1楼的供参考
"decode 1" outputs "one""decode 21" outputs "twenty one""decode 105" outputs "one hundred and five""decode 56945781" outputs "fifty six million nine hundred and forty five thousand seven hundred and eighty one"The application should be able to handle any number from the range 0 - 999999999.

解决方案 »

  1.   

    public class Main_app { static String[] to_19 = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
    "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
    static String[] tens = { "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
    static String[] denom = { "", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion",
    "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion", "quattuordecillion", "sexdecillion", "septendecillion", "octodecillion",
    "novemdecillion", "vigintillion" }; public static void main(String[] argv) throws Exception {
    int tstValue = 111199697;
    Main_app itoe = new Main_app();
    System.out.println(itoe.english_number(tstValue));
    } private String convert_nn(int val) throws Exception {
    if (val < 20)
    return to_19[val]; int flag = val / 10 - 2;
    if (val % 10 != 0)
    return tens[flag] + "-" + to_19[val % 10];
    else
    return tens[flag];
    } private String convert_nnn(int val) throws Exception {
    String word = "";
    int rem = val / 100;
    int mod = val % 100;
    if (rem > 0) {
    word = to_19[rem] + " hundred";
    if (mod > 0) {
    word = word + " ";
    }
    }
    if (mod > 0) {
    word = word + convert_nn(mod);
    }
    return word;
    } public String english_number(int val) throws Exception {
    if (val < 100) {
    return convert_nn(val);
    }
    if (val < 1000) {
    return convert_nnn(val);
    }
    for (int v = 0; v < denom.length; v++) {
    int didx = v - 1;
    int dval = new Double(Math.pow(1000, v)).intValue();
    if (dval > val) {
    int mod = new Double(Math.pow(1000, didx)).intValue();
    int l = val / mod;
    int r = val - (l * mod);
    String ret = convert_nnn(l) + " " + denom[didx];
    if (r > 0) {
    ret = ret + ", " + english_number(r);
    }
    return ret;
    }
    }
    throw new Exception("Should never get here, bottomed out in english_number");
    }
    }
      

  2.   

    我英语四级还没过,下面的一堆单词我只认识code java static string thousand million billion七个单词 static String[] denom = { "", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion",
                "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion", "quattuordecillion", "sexdecillion", "septendecillion", "octodecillion",
                "novemdecillion", "vigintillion" };
      

  3.   


    public class Main {    static String[] to_19 = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
        static String[] tens = { "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
        static String[] denom = { "", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion",
                "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion", "quattuordecillion", "sexdecillion", "septendecillion", "octodecillion",
                "novemdecillion", "vigintillion" };    public static void main(String[] argv) throws Exception {
            int tstValue = 111199697;
            Main_app itoe = new Main_app();
            System.out.println(itoe.english_number(tstValue));
        }    private String convert_nn(int val) throws Exception {
            if (val < 20)
                return to_19[val];        int flag = val / 10 - 2;
            if (val % 10 != 0)
                return tens[flag] + "-" + to_19[val % 10];
            else
                return tens[flag];
        }    private String convert_nnn(int val) throws Exception {
            String word = "";
            int rem = val / 100;
            int mod = val % 100;
            if (rem > 0) {
                word = to_19[rem] + " hundred";
                if (mod > 0) {
                    word = word + " ";
                }
            }
            if (mod > 0) {
                word = word + convert_nn(mod);
            }
            return word;
        }    public String english_number(int val) throws Exception {
            if (val < 100) {
                return convert_nn(val);
            }
            if (val < 1000) {
                return convert_nnn(val);
            }
            for (int v = 0; v < denom.length; v++) {
                int didx = v - 1;
                int dval = new Double(Math.pow(1000, v)).intValue();
                if (dval > val) {
                    int mod = new Double(Math.pow(1000, didx)).intValue();
                    int l = val / mod;
                    int r = val - (l * mod);
                    String ret = convert_nnn(l) + " " + denom[didx];
                    if (r > 0) {
                        ret = ret + ", " + english_number(r);
                    }
                    return ret;
                }
            }
            throw new Exception("Should never get here, bottomed out in english_number");
        }
    }
      

  4.   

    import java.text.DecimalFormat;public class EnglishNumberToWords {  private static final String[] tensNames = {
        "",
        " ten",
        " twenty",
        " thirty",
        " forty",
        " fifty",
        " sixty",
        " seventy",
        " eighty",
        " ninety"
      };  private static final String[] numNames = {
        "",
        " one",
        " two",
        " three",
        " four",
        " five",
        " six",
        " seven",
        " eight",
        " nine",
        " ten",
        " eleven",
        " twelve",
        " thirteen",
        " fourteen",
        " fifteen",
        " sixteen",
        " seventeen",
        " eighteen",
        " nineteen"
      };  private static String convertLessThanOneThousand(int number) {
        String soFar;    if (number % 100 < 20){
          soFar = numNames[number % 100];
          number /= 100;
        }
        else {
          soFar = numNames[number % 10];
          number /= 10;      soFar = tensNames[number % 10] + soFar;
          number /= 10;
        }
        if (number == 0) return soFar;
        return numNames[number] + " hundred" + soFar;
      }
      public static String convert(long number) {
        // 0 to 999 999 999 999
        if (number == 0) { return "zero"; }    String snumber = Long.toString(number);    // pad with "0"
        String mask = "000000000000";
        DecimalFormat df = new DecimalFormat(mask);
        snumber = df.format(number);    // XXXnnnnnnnnn 
        int billions = Integer.parseInt(snumber.substring(0,3));
        // nnnXXXnnnnnn
        int millions  = Integer.parseInt(snumber.substring(3,6)); 
        // nnnnnnXXXnnn
        int hundredThousands = Integer.parseInt(snumber.substring(6,9)); 
        // nnnnnnnnnXXX
        int thousands = Integer.parseInt(snumber.substring(9,12));        String tradBillions;
        switch (billions) {
        case 0:
          tradBillions = "";
          break;
        case 1 :
          tradBillions = convertLessThanOneThousand(billions) 
          + " billion ";
          break;
        default :
          tradBillions = convertLessThanOneThousand(billions) 
          + " billion ";
        }
        String result =  tradBillions;    String tradMillions;
        switch (millions) {
        case 0:
          tradMillions = "";
          break;
        case 1 :
          tradMillions = convertLessThanOneThousand(millions) 
          + " million ";
          break;
        default :
          tradMillions = convertLessThanOneThousand(millions) 
          + " million ";
        }
        result =  result + tradMillions;    String tradHundredThousands;
        switch (hundredThousands) {
        case 0:
          tradHundredThousands = "";
          break;
        case 1 :
          tradHundredThousands = "one thousand ";
          break;
        default :
          tradHundredThousands = convertLessThanOneThousand(hundredThousands) 
          + " thousand ";
        }
        result =  result + tradHundredThousands;    String tradThousand;
        tradThousand = convertLessThanOneThousand(thousands);
        result =  result + tradThousand;    // remove extra spaces!
        return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " ");
      }  /**
       * testing
       * @param args
       */
      public static void main(String[] args) {
        System.out.println("*** " + EnglishNumberToWords.convert(0));
        System.out.println("*** " + EnglishNumberToWords.convert(1));
        System.out.println("*** " + EnglishNumberToWords.convert(16));
        System.out.println("*** " + EnglishNumberToWords.convert(100));
        System.out.println("*** " + EnglishNumberToWords.convert(118));
        System.out.println("*** " + EnglishNumberToWords.convert(200));
        System.out.println("*** " + EnglishNumberToWords.convert(219));
        System.out.println("*** " + EnglishNumberToWords.convert(800));
        System.out.println("*** " + EnglishNumberToWords.convert(801));
        System.out.println("*** " + EnglishNumberToWords.convert(1316));
        System.out.println("*** " + EnglishNumberToWords.convert(1000000));
        System.out.println("*** " + EnglishNumberToWords.convert(2000000));
        System.out.println("*** " + EnglishNumberToWords.convert(3000200));
        System.out.println("*** " + EnglishNumberToWords.convert(700000));
        System.out.println("*** " + EnglishNumberToWords.convert(9000000));
        System.out.println("*** " + EnglishNumberToWords.convert(9001000));
        System.out.println("*** " + EnglishNumberToWords.convert(123456789));
        System.out.println("*** " + EnglishNumberToWords.convert(2147483647));
        System.out.println("*** " + EnglishNumberToWords.convert(3000000010L));    /*
         *** zero
         *** one
         *** sixteen
         *** one hundred
         *** one hundred eighteen
         *** two hundred
         *** two hundred nineteen
         *** eight hundred
         *** eight hundred one
         *** one thousand three hundred sixteen
         *** one million 
         *** two millions 
         *** three millions two hundred
         *** seven hundred thousand 
         *** nine millions 
         *** nine millions one thousand 
         *** one hundred twenty three millions four hundred 
         **      fifty six thousand seven hundred eighty nine
         *** two billion one hundred forty seven millions 
         **      four hundred eighty three thousand six hundred forty seven
         *** three billion ten
         **/
      }
    }
      

  5.   

    public class Main {    static String[] to_19 = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
        static String[] tens = { "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
        static String[] denom = { "", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion",
                "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion", "quattuordecillion", "sexdecillion", "septendecillion", "octodecillion",
                "novemdecillion", "vigintillion" };    public static void main(String[] argv) throws Exception {
            int tstValue = 111199697;
            Main_app itoe = new Main_app();
            System.out.println(itoe.english_number(tstValue));
        }    private String convert_nn(int val) throws Exception {
            if (val < 20)
                return to_19[val];        int flag = val / 10 - 2;
            if (val % 10 != 0)
                return tens[flag] + "-" + to_19[val % 10];
            else
                return tens[flag];
        }    private String convert_nnn(int val) throws Exception {
            String word = "";
            int rem = val / 100;
            int mod = val % 100;
            if (rem > 0) {
                word = to_19[rem] + " hundred";
                if (mod > 0) {
                    word = word + " ";
                }
            }
            if (mod > 0) {
                word = word + convert_nn(mod);
            }
            return word;
        }    public String english_number(int val) throws Exception {
            if (val < 100) {
                return convert_nn(val);
            }
            if (val < 1000) {
                return convert_nnn(val);
            }
            for (int v = 0; v < denom.length; v++) {
                int didx = v - 1;
                int dval = new Double(Math.pow(1000, v)).intValue();
                if (dval > val) {
                    int mod = new Double(Math.pow(1000, didx)).intValue();
                    int l = val / mod;
                    int r = val - (l * mod);
                    String ret = convert_nnn(l) + " " + denom[didx];
                    if (r > 0) {
                        ret = ret + ", " + english_number(r);
                    }
                    return ret;
                }
            }
            throw new Exception("Should never get here, bottomed out in english_number");
        }
    }
      

  6.   

    以前有人问过一个类似的问题
    http://topic.csdn.net/u/20110726/17/340f95e3-d2ea-41c9-94a4-d59c48c811a5.html把当时在原贴的答复拷贝过来。在该基础上稍微改一改就可以了
    现在新换的本本,没有java环境,所以修改版本暂时保留。
    class Matrix {   
        public static final String[] baseTable = {
            "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"
        };
            
        public static final String[] unitTable = {"hundred", "thousand"};
        
        public static void main(String[] args) {
            int sum = 0;
            for (int i=1; i<=1000; i++) {
                String s = analyze(i);
                System.out.println(s);
                sum += s.length();
            }
            System.out.println(sum);
        }    public static String analyze(int num) {
            if (num < 0) {return "";}
            
            StringBuilder buf = new StringBuilder();
            if (num < 20) {
                return baseTable[num];
            } else if (num < 100) {
                if (num%10 == 0) {
                    buf.append(baseTable[num]);
                } else {
                    buf.append(baseTable[num-num%10]);
                    buf.append(baseTable[num%10]);
                }
            } else if (num < 1000) {
                buf.append(baseTable[num/100]).append(unitTable[0]);
                if (num%100 != 0) {
                    buf.append("and");
                    buf.append(analyze(num%100));
                }
            } else if (num < 10000) {
                buf.append(baseTable[num/1000]).append(unitTable[1]);
                if (num%1000 != 0) {
                    buf.append("and");
                    buf.append(analyze(num%1000));
                }
            }        return buf.toString();
        }    
    }
      

  7.   

    装上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: 1 followed by 303 zeros
    所以把数字字符串按3位分割,分别解析class NumUtil {   
        public static final String[] 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"
        };
        
        public static final String[] enUnit = {"hundred", "thousand", "million", "billion", "trillion", "quintillion"}; //单位表
        
        public static void main(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));
        }    public static String analyze(long num) { //long型参数,
            return analyze(String.valueOf(num)); //因为long型有极限,所以以字符串参数方法为主
        }    public static String analyze(String num) { //数字字符串参数
             //判断字符串是否为数字
            if (! num.matches("\\d+")) {return String.format("%s is not number", num);}        num = num.replaceAll("^[0]*([1-9]*)", "$1"); //把字符串前面的0去掉        if (num.length() == 0) { //如果长度为0,则原串都是0
                return enNum[0];
            } else if (num.length() > 9) { //如果大于9,即大于999999999,题目限制条件
                return "too big";
            }        //按3位分割分组
            int count = (num.length()%3 == 0) ? num.length()/3 : num.length()/3 + 1;
            if (count > enUnit.length) {return "too big";} //判断组单位是否超过,
                                                                   //可以根据需求适当追加enUnit
            String[] group = new String[count];
            for (int i=num.length(), j=group.length-1; i>0; i-=3) {
                group[j--] = num.substring(Math.max(i-3, 0), i);
            }
            
            StringBuilder buf = new StringBuilder(); //结果保存
            for(int i=0; i<count; i++) { //遍历分割的组
                int v = 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 < 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(" ");
                }
            }        return buf.toString().trim(); //返回值
        }
    }
      

  8.   

    if (v < 20 || v%10 == 0)以后的处理放到if (v != 0)里去做class NumUtil {   
        public static final String[] 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"
        };
        
        public static final String[] enUnit = {"hundred", "thousand", "million", "billion", "trillion", "quintillion"}; //单位表
        
        public static void main(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));
        }    public static String analyze(long num) { //long型参数,
            return analyze(String.valueOf(num)); //因为long型有极限,所以以字符串参数方法为主
        }    public static String analyze(String num) { //数字字符串参数
             //判断字符串是否为数字
            if (! num.matches("\\d+")) {return String.format("%s is not number", num);}        num = num.replaceAll("^[0]*([1-9]*)", "$1"); //把字符串前面的0去掉        if (num.length() == 0) { //如果长度为0,则原串都是0
                return enNum[0];
            } else if (num.length() > 9) { //如果大于9,即大于999999999,题目限制条件
                return "too big";
            }        //按3位分割分组
            int count = (num.length()%3 == 0) ? num.length()/3 : num.length()/3 + 1;
            if (count > enUnit.length) {return "too big";} //判断组单位是否超过,
                                                                   //可以根据需求适当追加enUnit
            String[] group = new String[count];
            for (int i=num.length(), j=group.length-1; i>0; i-=3) {
                group[j--] = num.substring(Math.max(i-3, 0), i);
            }
            
            StringBuilder buf = new StringBuilder(); //结果保存
            for(int i=0; i<count; i++) { //遍历分割的组
                int v = 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(" ");
                    }
                }           
            }        return buf.toString().trim(); //返回值
        }
    }
      

  9.   


    public class Decode {    static String[] to_19 = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
        static String[] tens = { "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
        static String[] denom = { "", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion",
                "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion", "quattuordecillion", "sexdecillion", "septendecillion", "octodecillion",
                "novemdecillion", "vigintillion" };    public static void main(String[] argv) throws Exception {
            int tstValue = 111199697;
            Main_app itoe = new Main_app();
            System.out.println(itoe.english_number(tstValue));
        }    private String convert_nn(int val) throws Exception {
            if (val < 20)
                return to_19[val];        int flag = val / 10 - 2;
            if (val % 10 != 0)
                return tens[flag] + "-" + to_19[val % 10];
            else
                return tens[flag];
        }    private String convert_nnn(int val) throws Exception {
            String word = "";
            int rem = val / 100;
            int mod = val % 100;
            if (rem > 0) {
                word = to_19[rem] + " hundred";
                if (mod > 0) {
                    word = word + " ";
                }
            }
            if (mod > 0) {
                word = word + convert_nn(mod);
            }
            return word;
        }    public String english_number(int val) throws Exception {
            if (val < 100) {
                return convert_nn(val);
            }
            if (val < 1000) {
                return convert_nnn(val);
            }
            for (int v = 0; v < denom.length; v++) {
                int didx = v - 1;
                int dval = new Double(Math.pow(1000, v)).intValue();
                if (dval > val) {
                    int mod = new Double(Math.pow(1000, didx)).intValue();
                    int l = val / mod;
                    int r = val - (l * mod);
                    String ret = convert_nnn(l) + " " + denom[didx];
                    if (r > 0) {
                        ret = ret + ", " + english_number(r);
                    }
                    return ret;
                }
            }
            throw new Exception("Should never get here, bottomed out in english_number");
        }
    }
      

  10.   


    借光啊!呵呵。
    我在数据库里要执行统计查询select sum(cls+zr+yj-zc-xs-st) from yz_scjl,但是操作数数据类型 varchar 对于 sum 运算符无效。就是说sum括号里的必须是整型,不能是String类型。我把javaBean里的都改成了int,但是之前用户添加的都还是String类型,并且很无语的是用户添加的不仅仅限于数字,还包括“120头”,“256个”“无”这样的数据!没办法直接把表字段类型改成整型!让清空数据啊!可是数据是万万不能删除的!用户线上随时在用!该怎么办?其中还有些是空字段!
      

  11.   

    0的处理较啰嗦,有待完善。
    public class numberToWords {
    private static final String[] ONES = {"Zero", "One", "Two", "Three", "Four", "Five","Six", "Seven", "Eight", "Nine" };
    private static final String[] TEENS = {"Ten", "Eleven", "Twelve", "Thirteen", null, "Fifteen",
    null, null, "Eighteen", null };
    private static final String[] TENS = {null, null, "Twenty", "Thirty", "Forty", "Fifty",
    "Sixty", "Seventy", "Eighty", "Ninety" };
    //转换三位数,即处理<1000的数
    public static String numberToWords(int number) {
    if (number<10) {
    return ONES[number];
    } else if (number<20) {
    int n = number - 10;
    String words = TEENS[n];
    return words==null ? ONES[n]+"teen" : TEENS[n];
    } else if (number<100){
    int n = number % 10;
    return TENS[number/10] +
    (n==0 ? "" : (" " + numberToWords(n)));
    } else {
    int n = number % 100;
    return ONES[number/100] +" hundred"+
    (n==0 ? "" : (" and " + numberToWords(n)));

    }
    //将数三位三位地分柝,再调用三位数的方法,然后输出
    static void numToWords(long number){ 
    Long num=number;
    String str=""; 
    String[] denom = {"thousand", "million", "billion", "trillion"};
    if(number>999999999) System.out.println(number+": 超出范围,应<=999999999");
    else {
    for(int i=num.toString().length(),j=0;i>0;i=i-3,j++){
    if(num<1000)
    str=numberToWords(num.intValue())+" "+str;
    else{
    Long n = num % 1000;
    // str=(n.equals(0L) ?" zero ":numberToWords(n.intValue()))+" "+denom[j]+" "+str;
    str=(denom[j]+" "+numberToWords(n.intValue()))+" "+str;
    num=num/1000;
    }
    }
    System.out.println(number+": "+str);
    }
    }
    //测试
    public static void main(String[] args) {
    long[] numbers={56945781L,1999999999L,899010039L,105L,21L,0L};
    for(long n:numbers)
    numToWords(n);
    }
    /*输出
    56945781: Fifty Six million Nine hundred and Forty Five thousand Seven  hundred and Eighty One 
    1999999999: 超出范围,应<=999999999
    899010039: Eight hundred and Ninety Nine million Ten thousand Thirty Nine 
    105: One hundred and Five 
    21: Twenty One 
    0: Zero 
    */
    }
      

  12.   

          顶一下。我是刚学习java,挺感兴趣的。但是不知道怎么入手。。
      

  13.   

    惭愧了,billion后面的单词都不认识
      

  14.   

    不知道这个可以不,以前练习的(中文的)
    顺便小弟不会贴专业的代码格式,只能用纯文本了。public class NumberTest
    {
    //该方法检查输入字符串是否为数字并输出相应结果。
    public static String checkNumber(String str)

    String str1 = new String();

    char[] c = str.toCharArray();

    int sum = 0;
    for(char s : c)
    {
    if(s > 64 && s < 91 ||s > 96 && s < 123)
     sum = 1;
    }
    if(sum == 1)
    return "用户输入的字符不都为数字,无法转换!";
    else
    {
    String[] num = {"零", "一", "二", "三", "四", "五", "六", "七","八", "九"};
    String[] label = {"十", "百", "千", "万", "十", "百","千"};

    if(str.length() < 9)
    {
    int nm = str.length() - 2;

    for (int i = 0; i < str.length() - 1; i++)
    {
    if(c[i] != '0')
    str1 += num[c[i] - 48] + label[nm--];

    else if(c[i] == '0' && c[i+1] != '0')
    {
    if(label[nm--] == "万")
    str1 += "万" + num[c[i] - 48];
    else
    str1 += num[c[i] - 48];
    }

    else if(c[i] == '0' && c[i+1] == '0')
    {
    if(label[nm--] == "万")
    str1 += "万";
    }

    else 
    {
    str1 += "";
    nm--;
    }
    }

    }
    else
    return "字符个数不能超过8!";
    if(c[str.length()-1] != '0')
    {
    return str1 + num[c[str.length()-1] -48];
    }
    else
    return str1;
    }

    } public static void main(String[] args)
    {

    for(String s : args)
    {
    if(s.length() > 8 )
    {
    System.out.println(s);
    System.out.println("输入的字符最多为8个!");
    }
    else if( s.length() < 0)
    {
    System.out.println(s);
    System.out.println("输入不能为空!");
    }
    else
    {
    System.out.println(s);
    System.out.println(checkNumber(s));
    }
    }
    }
    }