document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. open System
  2. module Speller =
  3.     let getDigits number =
  4.         match number with
  5.         | 0 -> ""
  6.         | 1 -> "one"
  7.         | 2 -> "two"
  8.         | 3 -> "three"
  9.         | 4 -> "four"
  10.         | 5 -> "five"
  11.         | 6 -> "six"
  12.         | 7 -> "seven"
  13.         | 8 -> "eight"
  14.         | 9 -> "nine"
  15.         | _ -> failwith("Incorrect format: " + number.ToString())
  16.  
  17.     let getTens number =
  18.         match number with
  19.         | 0 -> String.Empty
  20.         | _ when number < 10 -> getDigits number
  21.         | _ when number < 20 ->
  22.             match number with
  23.             | 10 -> "ten"
  24.             | 11 -> "eleven"
  25.             | 12 -> "twelve"
  26.             | 13 -> "thirteen"
  27.             | 15 -> "fifteen"
  28.             | _ -> getDigits(number - 10) + "teen"
  29.         | _ ->
  30.             let tens = number / 10
  31.             let digits = number % 10
  32.             match tens with
  33.             | 2 -> "twenty " + getDigits digits
  34.             | 3 -> "thirty " + getDigits digits
  35.             | 4 -> "forty " + getDigits digits
  36.             | 5 -> "fifty " + getDigits digits
  37.             | _ -> getDigits tens + "ty " + getDigits digits
  38.  
  39.     let getHundreds number =
  40.         match number with
  41.         | _ when number <= 0 -> String.Empty
  42.         | _ when number < 100 -> getTens number
  43.         | _ ->
  44.             let hundreds = number / 100
  45.             let tenstr =
  46.                 if (number % 100) > 0 then
  47.                     " and " + getTens(number % 100)
  48.                 else String.Empty
  49.             String.Format("{0} hundred{1}", getDigits(hundreds), tenstr).TrimEnd()
  50.  
  51.     let getThousands number =
  52.         let thousands = number / 1000
  53.         let thstr =
  54.             match thousands with
  55.             | _ when thousands > 999 -> failwith "Number too big"
  56.             | _ when thousands > 99 -> getHundreds thousands
  57.             | _ when thousands > 9 -> getTens thousands
  58.             | _ -> getDigits thousands
  59.         String.Format("{0} thousand {1}", thstr, getHundreds(number % 1000)).TrimEnd()
  60.  
  61.     let Spell (number : int) =
  62.         match number.ToString().Length with
  63.         | _ when number <= 0 -> failwith "Value must be positive"
  64.         | 1 -> getDigits number
  65.         | 2 -> getTens number
  66.         | 3 -> getHundreds number
  67.         | _ -> getThousands number
');