Function below can be used in converting any number into text.
public string
NumberToText(int number)
{
if (number == 0) return
"Zero";
if (number == -2147483648) return
"Minus Two Hundred and Fourteen Crore Seventy
Four Lakh Eighty Three Thousand Six
Hundred and Forty Eight";
int[] num = new int[4];
int first = 0;
int u, h, t;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
if (number < 0)
{
sb.Append("Minus ");
number = -number;
}
string[] words0 = { "",
"One ", "Two
", "Three ", "Four ", "Five
", "Six ", "Seven ", "Eight
", "Nine " };
string[] words1 = { "Ten
", "Eleven ", "Twelve ", "Thirteen
", "Fourteen ", "Fifteen ", "Sixteen
", "Seventeen ", "Eighteen ", "Nineteen
" };
string[] words2 = { "Twenty
", "Thirty ", "Forty ", "Fifty
", "Sixty ", "Seventy ", "Eighty
", "Ninety " };
string[] words3 = { "Thousand
", "Lakh ", "Crore " };
num[0] = number % 1000; // units
num[1] = number / 1000;
num[2] = number / 100000;
num[1] = num[1] - 100 * num[2]; // thousands
num[3] = number / 10000000; // crores
num[2] = num[2] - 100 * num[3]; // lakhs
for (int i = 3; i
> 0; i--)
{
if (num[i] != 0)
{
first = i;
break;
}
}
for (int i = first; i
>= 0; i--)
{
if (num[i] == 0) continue;
u
= num[i] % 10; // ones
t
= num[i] / 10;
h
= num[i] / 100; // hundreds
t
= t - 10 * h; // tens
if (h > 0) sb.Append(words0[h] + "Hundred ");
if (u > 0 || t > 0)
{
//if (h > 0 || i == 0) sb.Append("and
");
if (t == 0)
sb.Append(words0[u]);
else if
(t == 1)
sb.Append(words1[u]);
else
sb.Append(words2[t - 2] + words0[u]);
}
if (i != 0) sb.Append(words3[i - 1]);
}
// sb.Append("
Rupees Only");
return sb.ToString().TrimEnd();
}
And if you want to convert Rupees value in word then one can use this idea.Here lblBUnit contains the bigger unit of any currency and lblSUnit holds the value of smaller unit of any currency.
int i = 0;
String[] val = lbltotal_amount.Text.Split('.');
foreach (string s in val)
i++;
lbltotal_amountinword.Text = NumberToText(Convert.ToInt32(val[0]));
if (i == 1)
lbltotal_amountinword.Text = lbltotal_amountinword.Text + " " + lblBUnit.Text + " Only";
else
lbltotal_amountinword.Text = lbltotal_amountinword.Text + " " + lblBUnit.Text + " and " + NumberToText(Convert.ToInt32(val[1]))
+ " " + lblSUnit.Text + " Only";