using System; using System.Collections.Generic; using System.Text; namespace MisIngredientesVue.Core.Extensions { public static class DecimalExtensions { public static string NumberToWords(int number) { if (number == 0) return "CERO"; if (number < 0) return "MENOS " + NumberToWords(Math.Abs(number)); string words = ""; if ((number / 1000000) > 0) { if (number >= 2000000) words += NumberToWords(number / 1000000) + " MILLONES "; else words += NumberToWords(number / 1000000) + " MILLÓN "; number %= 1000000; } if ((number / 1000) > 0) { var thousands = NumberToWords(number / 1000) + " MIL "; if (thousands.StartsWith("UN MIL")) thousands = "MIL "; words += thousands; number %= 1000; } if ((number / 100) > 0) { var hundreds = ""; if (number == 100) hundreds = "CIEN "; else if (number > 100 && number < 200) hundreds = "CIENTO "; else if (number >= 500 && number < 600) hundreds = "QUINIENTOS "; else if (number >= 700 && number < 800) hundreds = "SETECIENTOS "; else if (number >= 900 && number < 1000) hundreds = "NOVECIENTOS "; else hundreds = NumberToWords(number / 100) + "CIENTOS "; words += hundreds; number %= 100; } if (number > 0) { if (words != "" && !words.EndsWith("CIENTO ") && !words.EndsWith("IENTOS ") && !words.EndsWith("MIL ") && !words.EndsWith("MILLÓN ") && !words.EndsWith("MILLONES ")) words += "Y "; var unitsMap = new[] { "CERO", "UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISÉIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIÚN", "VEINTIDÓS", "VEINTITRÉS", "VEINTICUATRO", "VEINTICINCO", "VEINTISÉIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE" }; var tensMap = new[] { "CERO", "DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA" }; if (number < 30) words += unitsMap[number]; else { words += tensMap[number / 10]; if ((number % 10) > 0) words += " Y " + unitsMap[number % 10]; } } return words; } public static string CurrencyToWords(this decimal c) { var cs = "" + c; if (!cs.Contains(".")) return NumberToWords((int)c).Trim() + " 00/100"; else { var dec = cs.Split('.')[1]; if (dec.Length == 1) dec += "0"; if (dec.Length > 2) dec = dec.Substring(0, 2); return NumberToWords(Convert.ToInt32(cs.Split('.')[0])) + " " + dec.PadLeft(2, '0') + "/100"; } } } }