Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [Solved]Numbers to Words Converter
Forum Updated to NodeBB v4.3 + New Features

[Solved]Numbers to Words Converter

Scheduled Pinned Locked Moved General and Desktop
8 Posts 5 Posters 4.8k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    prabuqt
    wrote on last edited by
    #1

    Hi Everyone.
    Is their any method which converts integer number to word, i.e.,
    2 ---> Two,
    23 ---> Twenty Three,
    150 ---> One Hundred and Fifty etc.

    Thank you in advance.

    D 1 Reply Last reply
    0
    • D Offline
      D Offline
      deimos
      wrote on last edited by
      #2

      not really Qt related, but you can try to find something "here":https://www.google.com/search?q=Numbers+to+Words+Converter+c++ :)

      1 Reply Last reply
      0
      • N Offline
        N Offline
        noah
        wrote on last edited by
        #3

        Had to do this a while ago, here's my Qt based interpretation of what I found to be the an elegant solution.

        @
        //Based on https://github.com/icelander/number_to_text
        //No license encumbrance.
        static QString numberToText(uint number)
        {
        static QMap<uint, QString> numbers;

        //Only initialize once
        if (numbers.isEmpty())
        {
        numbers[0] = "zero";
        numbers[1] = "one";
        numbers[2] = "two";
        numbers[3] = "three";
        numbers[4] = "four";
        numbers[5] = "five";
        numbers[6] = "six";
        numbers[7] = "seven";
        numbers[8] = "eight";
        numbers[9] = "nine";
        numbers[10] = "ten";
        numbers[11] = "eleven";
        numbers[12] = "twelve";
        numbers[13] = "thirteen";
        numbers[14] = "fourteen";
        numbers[15] = "fifteen";
        numbers[16] = "sixteen";
        numbers[17] = "seventeen";
        numbers[18] = "eighteen";
        numbers[19] = "nineteen";
        numbers[20] = "twenty";
        numbers[30] = "thirty";
        numbers[40] = "forty";
        numbers[50] = "fifty";
        numbers[60] = "sixty";
        numbers[70] = "seventy";
        numbers[80] = "eighty";
        numbers[90] = "ninety";
        }

        static QMap<uint, QString> powers;

        //Only initialize once
        if (powers.isEmpty())
        {
        powers[2] = "hundred";
        powers[3] = "thousand";
        powers[6] = "million";
        powers[9] = "billion";
        }

        QString output;

        if (number < 21)
        {
        output = numbers[number];
        }
        else if (number < 100)
        {
        output = numbers[10 * qFloor(number / 10)];
        uint remainder = number % 10;

        if (remainder > 0)
        output += "-" + numberToText(remainder);
        }
        else
        {
        uint power = 2;
        uint place = 0;
        QString powerString;

        //QMap::keys is ordered
        foreach (uint pow, powers.keys())
        {
        uint place_value = qPow(10, pow);
        uint tmp_place = qFloor(number / place_value);
        if (tmp_place < 1)
        break;

        place = tmp_place;
        power = pow;
        powerString = powers[pow];
        }

        if (power > 0)
        {
        output = numberToText(place) + " " + powerString;
        uint remainder = number % uint(qPow(10, power));

        if (remainder > 0)
        output += " " + numberToText(remainder);
        }
        }

        return output;
        }
        @

        D 1 Reply Last reply
        0
        • D Offline
          D Offline
          deimos
          wrote on last edited by
          #4

          nice job :)

          1 Reply Last reply
          0
          • P Offline
            P Offline
            prabuqt
            wrote on last edited by
            #5

            Thank you Noah, marcoB for your response...

            1 Reply Last reply
            0
            • F Offline
              F Offline
              fluca1978
              wrote on last edited by
              #6

              Nice implementation

              1 Reply Last reply
              0
              • P prabuqt

                Hi Everyone.
                Is their any method which converts integer number to word, i.e.,
                2 ---> Two,
                23 ---> Twenty Three,
                150 ---> One Hundred and Fifty etc.

                Thank you in advance.

                D Offline
                D Offline
                dueltmp
                Banned
                wrote on last edited by dueltmp
                #7
                This post is deleted!
                1 Reply Last reply
                0
                • N noah

                  Had to do this a while ago, here's my Qt based interpretation of what I found to be the an elegant solution.

                  @
                  //Based on https://github.com/icelander/number_to_text
                  //No license encumbrance.
                  static QString numberToText(uint number)
                  {
                  static QMap<uint, QString> numbers;

                  //Only initialize once
                  if (numbers.isEmpty())
                  {
                  numbers[0] = "zero";
                  numbers[1] = "one";
                  numbers[2] = "two";
                  numbers[3] = "three";
                  numbers[4] = "four";
                  numbers[5] = "five";
                  numbers[6] = "six";
                  numbers[7] = "seven";
                  numbers[8] = "eight";
                  numbers[9] = "nine";
                  numbers[10] = "ten";
                  numbers[11] = "eleven";
                  numbers[12] = "twelve";
                  numbers[13] = "thirteen";
                  numbers[14] = "fourteen";
                  numbers[15] = "fifteen";
                  numbers[16] = "sixteen";
                  numbers[17] = "seventeen";
                  numbers[18] = "eighteen";
                  numbers[19] = "nineteen";
                  numbers[20] = "twenty";
                  numbers[30] = "thirty";
                  numbers[40] = "forty";
                  numbers[50] = "fifty";
                  numbers[60] = "sixty";
                  numbers[70] = "seventy";
                  numbers[80] = "eighty";
                  numbers[90] = "ninety";
                  }

                  static QMap<uint, QString> powers;

                  //Only initialize once
                  if (powers.isEmpty())
                  {
                  powers[2] = "hundred";
                  powers[3] = "thousand";
                  powers[6] = "million";
                  powers[9] = "billion";
                  }

                  QString output;

                  if (number < 21)
                  {
                  output = numbers[number];
                  }
                  else if (number < 100)
                  {
                  output = numbers[10 * qFloor(number / 10)];
                  uint remainder = number % 10;

                  if (remainder > 0)
                  output += "-" + numberToText(remainder);
                  }
                  else
                  {
                  uint power = 2;
                  uint place = 0;
                  QString powerString;

                  //QMap::keys is ordered
                  foreach (uint pow, powers.keys())
                  {
                  uint place_value = qPow(10, pow);
                  uint tmp_place = qFloor(number / place_value);
                  if (tmp_place < 1)
                  break;

                  place = tmp_place;
                  power = pow;
                  powerString = powers[pow];
                  }

                  if (power > 0)
                  {
                  output = numberToText(place) + " " + powerString;
                  uint remainder = number % uint(qPow(10, power));

                  if (remainder > 0)
                  output += " " + numberToText(remainder);
                  }
                  }

                  return output;
                  }
                  @

                  D Offline
                  D Offline
                  dueltmp
                  Banned
                  wrote on last edited by
                  #8
                  This post is deleted!
                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved