public static string ConvertToLiteral(int number, CurrencyGenere genere = CurrencyGenere.Male, CurrencyLanguage spanish = CurrencyLanguage.Spanish) { switch (LengthNumber(number)) { case 1: return Units(number, genere); case 2: return Tens(number, genere); case 3: return Hundreds(number, genere); case 4: return MillerUnits(number, genere); case 5: return MillerTens(number, genere); case 6: return MillerHundreds(number, genere); case 7: return MillionUnits(number, genere); case 8: return MillonTens(number, genere); case 9: return MillonHundreds(number, genere); default: return "Numero demasiado grande."; break; } }
private static string Hundreds(int number, CurrencyGenere genere) { if (number == 0) return ""; if (number >= 1 && number <= 99) return Tens(number, genere); if (number == 100) return "cien"; if (number >= 101 && number <= 199) return "ciento " + Tens(number % 100, genere); if (number == 200) return (genere == CurrencyGenere.Male) ? "doscientos" : "doscientas"; if (number == 500) return (genere == CurrencyGenere.Male) ? "quinientos" : "quinientas"; if (number >= 501 && number <= 599) return (genere == CurrencyGenere.Male) ? "quinientos " + Tens(number % 100, genere) : "quinientas " + Tens(number % 100, genere); if (number == 700) return (genere == CurrencyGenere.Male) ? "setecientos" : "setecientas"; if (number >= 701 && number <= 799) return (genere == CurrencyGenere.Male) ? "setecientos " + Tens(number % 100, genere) : "setecientas " + Tens(number % 100, genere); if (number >= 900 && number <= 999) return (genere == CurrencyGenere.Male) ? "novecientos " + Tens(number % 100, genere) : "novecientas " + Tens(number % 100, genere); return (genere == CurrencyGenere.Male) ? Units(number / 100, genere) + "cientos " + Tens(number % 100, genere) : Units(number / 100, genere) + "cientas " + Tens(number % 100, genere); }
private static string MillerUnits(int number, CurrencyGenere genere) { if (number > 999) { if (number > 1999) return Units(number / 1000) + " mil " + Hundreds(number % 1000, genere); return "un mil " + Hundreds(number % 1000, genere); } return Hundreds(number, genere); }
private static string MillerTens(int number, CurrencyGenere genere) { if (number > 9999) return Tens(number / 1000, genere) + " mil " + Hundreds(number % 1000, genere); return MillerUnits(number, genere); }
private static string Units(int number, CurrencyGenere genere = CurrencyGenere.Male, CurrencyLanguage spanish = CurrencyLanguage.Spanish) { switch (number) { case 0: return ""; case 1: return (genere == CurrencyGenere.Male) ? "uno" : "una"; case 2: return "dos"; case 3: return "tres"; case 4: return "cuatro"; case 5: return "cinco"; case 6: return "seis"; case 7: return "siete"; case 8: return "ocho"; case 9: return "nueve"; } return "Error"; }
private static string Tens(int number, CurrencyGenere genere) { switch (number) { case 0: return ""; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: return Units(number); case 10: return "diez"; case 11: return "once"; case 12: return "doce"; case 13: return "trece"; case 14: return "catorce"; case 15: return "quince"; case 16: return "dieciséis"; case 17: return "diecisiete"; case 18: return "dieciocho"; case 19: return "diecinueve"; case 20: return "veinte"; case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: return "veinti" + Units(number % 10, genere); case 30: return "treinta"; case 40: return "cuarenta"; case 50: return "cincuenta"; case 60: return "sesenta"; case 70: return "setenta"; case 80: return "ochenta"; case 90: return "noventa"; default: return Tens(number - number % 10, genere) + " y " + Units(number % 10, genere); } }
private static string MillonTens(int number, CurrencyGenere genere) { var tens = Tens(number / 1000000, genere); if (tens.EndsWith("na")) tens = tens.Remove(tens.Length - 1, 1); return tens + " millones " + MillerHundreds(number % 1000000, genere); }
private static string MillonHundreds(int number, CurrencyGenere genere) { var hundreds = Hundreds(number / 1000000, genere); hundreds = Regex.Replace(hundreds, "(?<xxx>as)", "os"); if (hundreds.EndsWith("na")) hundreds = hundreds.Remove(hundreds.Length - 1, 1); return hundreds + " millones " + MillerHundreds(number % 1000000, genere); }
private static string MillionUnits(int number, CurrencyGenere genere) { if (number > 1999999) return Units(number / 1000000, genere) + " millones " + MillerHundreds(number % 1000000, genere); return "un millon " + MillerHundreds(number % 1000000, genere); }