Numerical Alchemy: Converting Numbers to Text in C#

Bala Madhusoodhanan - Sep 2 - - Dev Community

Intro:
I find immense joy in exploring the endless possibilities that code plugins offer. Recently one of the problem that was requested to be solved was to convert numbers to text. Some of the scenarios where this would be super useful with business process would be

  • Financial Documents: Writing out numbers in words on checks, invoices, and contracts to prevent fraud and ensure clarity.

  • Legal Documents: Ensuring precision in legal agreements and documents where numbers need to be clearly understood.
    Educational Tools: Helping young children learn numbers and their corresponding words.

  • Data Entry: Reducing errors in data entry by providing both numerical and textual representations.

Custom Code plugin for custom connector:

using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

public class Script : ScriptBase
{
    public override async Task<HttpResponseMessage> ExecuteAsync()
    {
        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

        // Read the request content
        string requestBody = await this.Context.Request.Content.ReadAsStringAsync();
        JObject json = JObject.Parse(requestBody);
        int number = (int)json["num"];

        // Convert the number to words
        string numberInWords = NumberToWords(number);

        // Create the JSON response
        response.Content = CreateJsonContent($"{{\"message\": \"{numberInWords}\"}}");
        return response;
    }

    private static string[] units = { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
    private static string[] teens = { "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
    private static string[] tens = { "", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
    private static string[] thousands = { "", "Thousand", "Million", "Billion" };

private static string NumberToWords(int number)
{
    if (number == 0)
        return "Zero";

    if (number < 0)
        return "Minus " + NumberToWords(Math.Abs(number));

    string words = "";

    int[] numArray = new int[4];
    int first = 0;

    while (number > 0)
    {
        numArray[first++] = number % 1000;
        number /= 1000;
    }

    for (int i = first - 1; i >= 0; i--)
    {
        if (numArray[i] == 0)
            continue;

        string segment = "";

        int u = numArray[i] % 10;
        int t = (numArray[i] / 10) % 10;
        int h = (numArray[i] / 100) % 10;

        if (h > 0)
            segment += units[h] + " Hundred ";

        if (t > 0)
        {
            if (t == 1)
            {
                segment += teens[u] + " ";
            }
            else
            {
                segment += tens[t] + " ";
                if (u > 0)
                    segment += units[u] + " ";
            }
        }
        else if (u > 0)
        {
            segment += units[u] + " ";
        }

        if (segment != "")
            words += segment + thousands[i] + " ";
    }

    return words.Trim();
}
}
Enter fullscreen mode Exit fullscreen mode

Magic show:

demo1

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .