I am looking for a c# function which converts amount in words to relative number.
For an example, one thousand twenty five should be converted to 1025.
Early help of anyone is appreciated.
I am looking for a c# function which converts amount in words to relative number.
For an example, one thousand twenty five should be converted to 1025.
Early help of anyone is appreciated.
Have tested it to work on strings containing multiple numbers.
Usage: findNumbers("The cost is five hundred twenty nine thousand three hundred and twenty six dollars and twenty three cents");
Output: "The cost is 529326 dollars and 23 cents"
string numstring = "zero=0;one=1;two=2;three=3;four=4;five=5;six=6;seven=7;eight=8;nine=9;ten=10;eleven=11;twelve=12;thirteen=13;fourteen=14;fifteen=15;sixteen=16;seventeen=17;eighteen=18;nineteen=19;twenty=20;thirty=30;fourty=40;fifty=50;sixty=60;seventy=70;eighty=80;ninety=90;hundred=100;thousand=1000;";
Dictionary<string, string> theNumbers = numstring.TrimEnd(';').Split(';').ToDictionary(item => item.Split('=')[0], item => item.Split('=')[1]);
private string findNumbers(string input)
{
string tmp = "", tmpout = "", output = "";
input = input.Replace("hundred and", "hundred");
foreach (string word in input.Split(' '))
{
if (theNumbers.TryGetValue(word, out tmp))
{
if (tmpout != "") tmpout += " ";
tmpout += tmp;
} else
{
if (tmpout != "") output += " " + addNumbers(tmpout);
tmpout = "";
if (output != "") output += " ";
output += word;
}
}
if (tmpout != "") {
tmpout = addNumbers(tmpout);
if (output != "") output += " ";
output += tmpout;
}
return output;
}
private string addNumbers(string input)
{
int output = 0;
int output2 = 0;
foreach (string num in input.Split(' '))
{
if (output > 999)
{
output2 = output;
output = 0;
}
if (Int32.Parse(num) > 99)
{
output = output * Int32.Parse(num);
} else
{
output = output + Int32.Parse(num);
}
}
return (output + output2).ToString();
}
Check the link bellow, its Written in Python but you can see the logic if its useful or not.
Regards
There's a ruby gem by Marc Burns that does it. I recently forked it to add support for years. You can call ruby code from C#.