Advertisement
Guest User

NumbersToWords

a guest
Jun 19th, 2013
1,022
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.10 KB | None | 0 0
  1. import java.text.DecimalFormat;
  2.  
  3. public class EnglishNumberToWords {
  4.  
  5.   private static final String[] tensNames = {
  6.     "",
  7.     " Ten",
  8.     " Twenty",
  9.     " Thirty",
  10.     " Forty",
  11.     " Fifty",
  12.     " Sixty",
  13.     " Seventy",
  14.     " Eighty",
  15.     " Ninety"
  16.   };
  17.  
  18.   private static final String[] numNames = {
  19.     "",
  20.     " One",
  21.     " Two",
  22.     " Three",
  23.     " Four",
  24.     " Five",
  25.     " Six",
  26.     " Seven",
  27.     " Eight",
  28.     " Nine",
  29.     " Ten",
  30.     " Eleven",
  31.     " Twelve",
  32.     " Thirteen",
  33.     " Fourteen",
  34.     " Fifteen",
  35.     " Sixteen",
  36.     " Seventeen",
  37.     " Eighteen",
  38.     " Nineteen"
  39.   };
  40.  
  41.   private static String convertLessThanOneThousand(int number) {
  42.     String soFar;
  43.  
  44.     if (number % 100 < 20){
  45.       soFar = numNames[number % 100];
  46.       number /= 100;
  47.     }
  48.     else {
  49.       soFar = numNames[number % 10];
  50.       number /= 10;
  51.  
  52.       soFar = tensNames[number % 10] + soFar;
  53.       number /= 10;
  54.     }
  55.     if (number == 0) return soFar;
  56.     return numNames[number] + " Hundred" + soFar;
  57.   }
  58.  
  59.  
  60.   public static String convert(long number) {
  61.     // 0 to 999 999 999 999
  62.     if (number == 0) { return "Zero"; }
  63.  
  64.     String snumber = Long.toString(number);
  65.  
  66.     // pad with "0"
  67.     String mask = "000000000000";
  68.     DecimalFormat df = new DecimalFormat(mask);
  69.     snumber = df.format(number);
  70.  
  71.     // XXXnnnnnnnnn
  72.     int billions = Integer.parseInt(snumber.substring(0,3));
  73.     // nnnXXXnnnnnn
  74.     int millions  = Integer.parseInt(snumber.substring(3,6));
  75.     // nnnnnnXXXnnn
  76.     int hundredThousands = Integer.parseInt(snumber.substring(6,9));
  77.     // nnnnnnnnnXXX
  78.     int thousands = Integer.parseInt(snumber.substring(9,12));    
  79.  
  80.     String tradBillions;
  81.     switch (billions) {
  82.     case 0:
  83.       tradBillions = "";
  84.       break;
  85.     case 1 :
  86.       tradBillions = convertLessThanOneThousand(billions)
  87.       + " Billion ";
  88.       break;
  89.     default :
  90.       tradBillions = convertLessThanOneThousand(billions)
  91.       + " Billion ";
  92.     }
  93.     String result =  tradBillions;
  94.  
  95.     String tradMillions;
  96.     switch (millions) {
  97.     case 0:
  98.       tradMillions = "";
  99.       break;
  100.     case 1 :
  101.       tradMillions = convertLessThanOneThousand(millions)
  102.       + " Million ";
  103.       break;
  104.     default :
  105.       tradMillions = convertLessThanOneThousand(millions)
  106.       + " Million ";
  107.     }
  108.     result =  result + tradMillions;
  109.  
  110.     String tradHundredThousands;
  111.     switch (hundredThousands) {
  112.     case 0:
  113.       tradHundredThousands = "";
  114.       break;
  115.     case 1 :
  116.       tradHundredThousands = "One Thousand ";
  117.       break;
  118.     default :
  119.       tradHundredThousands = convertLessThanOneThousand(hundredThousands)
  120.       + " Thousand ";
  121.     }
  122.     result =  result + tradHundredThousands;
  123.  
  124.     String tradThousand;
  125.     tradThousand = convertLessThanOneThousand(thousands);
  126.     result =  result + tradThousand;
  127.  
  128.     // remove extra spaces!
  129.     return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " ");
  130.   }
  131.  
  132.   /**
  133.    * testing
  134.    * @param args
  135.    */
  136.   public static void main(String[] args) {
  137.     System.out.println("*** " + EnglishNumberToWords.convert(0));
  138.     System.out.println("*** " + EnglishNumberToWords.convert(1));
  139.     System.out.println("*** " + EnglishNumberToWords.convert(16));
  140.     System.out.println("*** " + EnglishNumberToWords.convert(100));
  141.     System.out.println("*** " + EnglishNumberToWords.convert(118));
  142.     System.out.println("*** " + EnglishNumberToWords.convert(200));
  143.     System.out.println("*** " + EnglishNumberToWords.convert(219));
  144.     System.out.println("*** " + EnglishNumberToWords.convert(800));
  145.     System.out.println("*** " + EnglishNumberToWords.convert(801));
  146.     System.out.println("*** " + EnglishNumberToWords.convert(1316));
  147.     System.out.println("*** " + EnglishNumberToWords.convert(1000000));
  148.     System.out.println("*** " + EnglishNumberToWords.convert(2000000));
  149.     System.out.println("*** " + EnglishNumberToWords.convert(3000200));
  150.     System.out.println("*** " + EnglishNumberToWords.convert(700000));
  151.     System.out.println("*** " + EnglishNumberToWords.convert(9000000));
  152.     System.out.println("*** " + EnglishNumberToWords.convert(9001000));
  153.     System.out.println("*** " + EnglishNumberToWords.convert(123456789));
  154.     System.out.println("*** " + EnglishNumberToWords.convert(2147483647));
  155.     System.out.println("*** " + EnglishNumberToWords.convert(3000000010L));
  156.  
  157.     /*
  158.      *** zero
  159.      *** one
  160.      *** sixteen
  161.      *** one hundred
  162.      *** one hundred eighteen
  163.      *** two hundred
  164.      *** two hundred nineteen
  165.      *** eight hundred
  166.      *** eight hundred one
  167.      *** one thousand three hundred sixteen
  168.      *** one million
  169.      *** two millions
  170.      *** three millions two hundred
  171.      *** seven hundred thousand
  172.      *** nine millions
  173.      *** nine millions one thousand
  174.      *** one hundred twenty three millions four hundred
  175.      **      fifty six thousand seven hundred eighty nine
  176.      *** two billion one hundred forty seven millions
  177.      **      four hundred eighty three thousand six hundred forty seven
  178.      *** three billion ten
  179.      **/
  180.   }
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement