Click here to Skip to main content
15,887,214 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
C# code for converting a decimal number(125.50) into words(one hundred and twentyfive rupees and fifty paise only) format.
Posted
Comments
StianSandberg 13-Aug-12 2:46am    
This is not a question. What have you tried? I'm not doing your homework...

1 solution

C#
/* File name : NumberToEnglish.cs */

/************************************************************************************************
 * This program is free software; you can redistribute it and/or modify.No terms and conditions!
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * Report bugs or comments to the author:Fred Byamugisha (fredbyk@gmail.com)[Kampala,Uganda]
 ***********************************************************************************************/
using System;
namespace custom.util
{
 public class NumberToEnglish
  {
   public String changeNumericToWords(double numb)
   {
    String num = numb.ToString();
    return changeToWords(num, false);
   }
   public String changeCurrencyToWords(String numb)
   {
    return changeToWords(numb, true);
   }
   public String changeNumericToWords(String numb)
   {
    return changeToWords(numb, false);
   }
   public String changeCurrencyToWords(double numb)
   {
    return changeToWords(numb.ToString(), true);
   }
   private String changeToWords(String numb, bool isCurrency)
   {
   String val = "", wholeNo = numb, points = "", andStr = "", pointStr="";
   String endStr = (isCurrency) ? ("Only") : ("");
   try
   {
    int decimalPlace = numb.IndexOf(".");
    if (decimalPlace > 0)
    {
     wholeNo = numb.Substring(0, decimalPlace);
     points = numb.Substring(decimalPlace+1);
     if (Convert.ToInt32(points) > 0)
     {
      andStr = (isCurrency)?("and"):("point");// just to separate whole numbers from points/cents
      endStr = (isCurrency) ? ("Cents "+endStr) : ("");
      pointStr = translateCents(points);
     }
    }
    val = String.Format("{0} {1}{2} {3}",translateWholeNumber(wholeNo).Trim(),andStr,pointStr,endStr);
   }
   catch { ;}
   return val;
  }
   private String translateWholeNumber(String number)
   {
    string word = "";
    try
    {
     bool beginsZero = false;//tests for 0XX
     bool isDone = false;//test if already translated
     double dblAmt = (Convert.ToDouble(number));
     //if ((dblAmt > 0) && number.StartsWith("0"))
     if (dblAmt > 0)
     {//test for zero or digit zero in a nuemric
      beginsZero = number.StartsWith("0");

      int numDigits = number.Length;
      int pos = 0;//store digit grouping
      String place = "";//digit grouping name:hundres,thousand,etc...
      switch (numDigits)
      {
       case 1://ones' range
        word = ones(number);
        isDone = true;
        break;
       case 2://tens' range
        word = tens(number);
        isDone = true;
        break;
       case 3://hundreds' range
        pos = (numDigits % 3) + 1;
        place = " Hundred ";
        break;
       case 4://thousands' range
       case 5:
       case 6:
        pos = (numDigits % 4) + 1;
        place = " Thousand ";
        break;
       case 7://millions' range
       case 8:
       case 9:
        pos = (numDigits % 7) + 1;
        place = " Million ";
        break;
       case 10://Billions's range
        pos = (numDigits % 10) + 1;
        place = " Billion ";
        break;
       //add extra case options for anything above Billion...
       default:
        isDone = true;
        break;
      }
      if (!isDone)
      {//if transalation is not done, continue...(Recursion comes in now!!)
       word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
       //check for trailing zeros
       if (beginsZero) word = " and " + word.Trim();
      }
      //ignore digit grouping names
      if (word.Trim().Equals(place.Trim())) word = "";
     }
    }
    catch { ;}
    return word.Trim();
   }
   private String tens(String digit)
   {
    int digt = Convert.ToInt32(digit);
    String name = null;
    switch (digt)
    {
     case 10:
      name = "Ten";
      break;
     case 11:
      name = "Eleven";
      break;
     case 12:
      name = "Twelve";
      break;
     case 13:
      name = "Thirteen";
      break;
     case 14:
      name = "Fourteen";
      break;
     case 15:
      name = "Fifteen";
      break;
     case 16:
      name = "Sixteen";
      break;
     case 17:
      name = "Seventeen";
      break;
     case 18:
      name = "Eighteen";
      break;
     case 19:
      name = "Nineteen";
      break;
     case 20:
      name = "Twenty";
      break;
     case 30:
      name = "Thirty";
      break;
     case 40:
      name = "Fourty";
      break;
     case 50:
      name = "Fifty";
      break;
     case 60:
      name = "Sixty";
      break;
     case 70:
      name = "Seventy";
      break;
     case 80:
      name = "Eighty";
      break;
     case 90:
      name = "Ninety";
      break;
     default:
      if (digt > 0)
      {
       name = tens(digit.Substring(0, 1) + "0") + " " + ones(digit.Substring(1));
      }
      break;
    }
    return name;
   }
   private String ones(String digit)
   {
    int digt = Convert.ToInt32(digit);
    String name = "";
    switch (digt)
    {
     case 1:
      name = "One";
      break;
     case 2:
      name = "Two";
      break;
     case 3:
      name = "Three";
      break;
     case 4:
      name = "Four";
      break;
     case 5:
      name = "Five";
      break;
     case 6:
      name = "Six";
      break;
     case 7:
      name = "Seven";
      break;
     case 8:
      name = "Eight";
      break;
     case 9:
      name = "Nine";
      break;
    }
    return name;
   }
   private String translateCents(String cents)
   {
    String cts = "", digit = "", engOne = "";
     for (int i = 0; i < cents.Length; i++)
     {
      digit = cents[i].ToString();
      if (digit.Equals("0"))
      {
       engOne = "Zero";
      }
      else
      {
       engOne = ones(digit);
      }
      cts += " " + engOne;
     }
    return cts;
   }
  }
 }

Main Program:

using System;
using System.Text;

namespace custom.util
{
 class Program
 {
  static void Main(string[] args)
  {
   NumberToEnglish num = new NumberToEnglish();
   while (true)
   {
    String input = Console.ReadLine();
    if (input == null || input.Length == 0) break;
    Console.WriteLine(num.changeNumericToWords(input));
    Console.WriteLine();
   }
  }
 }
}


its in code poroject

regards
sarva
 
Share this answer
 
Comments
ridoy 13-Aug-12 2:58am    
very good one..
Sarrrva 13-Aug-12 3:00am    
Otherwise Refer this link Guys

http://www.c-sharpcorner.com/uploadfile/b942f9/converting-numbers-to-words-in-C-Sharp/

regards
sarva
ridoy 13-Aug-12 3:05am    
Yes,this one is much easier and shorter.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900