How can I convert an integer into its verbal representation?

后端 未结 14 2275
走了就别回头了
走了就别回头了 2020-11-22 15:23

Is there a library or a class/function that I can use to convert an integer to it\'s verbal representation?

Example input:

4,567,788`

14条回答
  •  长发绾君心
    2020-11-22 15:54

    Here is the spanish version:

            public static string numeroALetras(int number)
        {
            if (number == 0)
                return "cero";
    
            if (number < 0)
                return "menos " + numeroALetras(Math.Abs(number));
    
            string words = "";
    
            if ((number / 1000000) > 0)
            {
                words += numeroALetras(number / 1000000) + " millón ";
                number %= 1000000;
            }
    
            if ((number / 1000) > 0)
            {
                words += (number / 1000) == 1? "mil ": numeroALetras(number / 1000) + " mil ";
                number %= 1000;
            }
            if ((number / 100) == 1)
            {
                if (number == 100)
                    words += "cien";
                else words += (number / 100)> 1? numeroALetras(number / 100) + " ciento ":"ciento ";
                number %= 100;
            }
            if ((number / 100) > 1)
            {
                var hundredMap = new[] {"","", "dosc", "tresc", "cuatroc", "quin", "seisc", "sietec", "ochoc", "novec" };
                if (number > 199)
                    words += hundredMap[number/100] + "ientos ";
                else {
                    words += numeroALetras(number / 100) + " ientos ";
                }
                number %= 100;
            }
    
            if (number > 0)
            {
                if (words != "")
                    words += " ";
    
                var unitsMap = new[] { "cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve", "veinte" };
                var tensMap = new[] { "cero", "diez", "veinti", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa" };
    
                if (number < 21)
                    words += unitsMap[number];
                else
                {                    
                    words += tensMap[number / 10];
                    if ((number % 10) > 0)
                        words += ((number % 10)>2?" y ": "") + unitsMap[number % 10];                    
                }
            }
    
            return words;
        }
    

提交回复
热议问题