static int ConverToDigit(string cnNumber)
{
int result = 0;
int temp = 0;
foreach (char c in cnNumber)
{
int temp1 = ToDigit(c);
if (temp1 == 10000)
{
result += temp;
result *= 10000;
temp = 0;
}
else if (temp1 > 9)
{
if (temp1 == 10 && temp == 0) temp = 1;
result += temp * temp1;
temp = 0;
}
else temp = temp1;
}
result += temp;
return result;
}
static int ToDigit(char cn)
{
int number = 0;
switch (cn)
{
case '零': number = 0; break;
case '一': number = 1; break;
case '二': number = 2; break;
case '三': number = 3; break;
case '四': number = 4; break;
case '五': number = 5; break;
case '六': number = 6; break;
case '七': number = 7; break;
case '八': number = 8; break;
case '九': number = 9; break;
case '十': number = 10; break;
case '百': number = 100; break;
case '千': number = 1000; break;
case '万': number = 10000; break;
}
return number;
}
static long ToLong(string cnDigit)
{
long result = 0;
string[] str = cnDigit.Split('亿');
if (str.Length == 1) result = ConverToDigit(str[0]);
else result = (long)ConverToDigit(str[0]) * 100000000 + ConverToDigit(str[1]);
return result;
}
/// <summary>
/// 将中文数字替换为阿拉伯数字(调用方法)
/// </summary>
/// <param name="word"></param>
/// <returns></returns>
public static string WordToNumber(string word)
{
string result = word;
string e = "([零一二三四五六七八九十百千万亿])+";
MatchCollection mc = Regex.Matches(word, e);
foreach(Match m in mc)
{
result = result.Replace(m.Value, ToLong(m.Value).ToString());
}
return result;
}
{
int result = 0;
int temp = 0;
foreach (char c in cnNumber)
{
int temp1 = ToDigit(c);
if (temp1 == 10000)
{
result += temp;
result *= 10000;
temp = 0;
}
else if (temp1 > 9)
{
if (temp1 == 10 && temp == 0) temp = 1;
result += temp * temp1;
temp = 0;
}
else temp = temp1;
}
result += temp;
return result;
}
static int ToDigit(char cn)
{
int number = 0;
switch (cn)
{
case '零': number = 0; break;
case '一': number = 1; break;
case '二': number = 2; break;
case '三': number = 3; break;
case '四': number = 4; break;
case '五': number = 5; break;
case '六': number = 6; break;
case '七': number = 7; break;
case '八': number = 8; break;
case '九': number = 9; break;
case '十': number = 10; break;
case '百': number = 100; break;
case '千': number = 1000; break;
case '万': number = 10000; break;
}
return number;
}
static long ToLong(string cnDigit)
{
long result = 0;
string[] str = cnDigit.Split('亿');
if (str.Length == 1) result = ConverToDigit(str[0]);
else result = (long)ConverToDigit(str[0]) * 100000000 + ConverToDigit(str[1]);
return result;
}
/// <summary>
/// 将中文数字替换为阿拉伯数字(调用方法)
/// </summary>
/// <param name="word"></param>
/// <returns></returns>
public static string WordToNumber(string word)
{
string result = word;
string e = "([零一二三四五六七八九十百千万亿])+";
MatchCollection mc = Regex.Matches(word, e);
foreach(Match m in mc)
{
result = result.Replace(m.Value, ToLong(m.Value).ToString());
}
return result;
}