将中文数字转为阿拉伯数字

2009年2月5日星期四

将中文数字转为阿拉伯数字

算法原理:

将亿以上的数在“亿”的位置拆开,分成两部分,例如:三十九亿零二十一万,拆成:三十九 和 零二十一万。

通过ConverToDigit()方法分别计算出两部分的值,前一部分的值乘上1亿,再加上后一部分,则为结果。

ConverToDigit()方法原理以例子来进行说明,比如有数:九千八百七十六万五千四百三十二

则将其拆分成:(9*1000+8*100+7*10+6)*10000+5*1000+4*100+3*10+2



view plaincopy to clipboardprint?
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 '壹':
case '一':number=1;break;
case '两':
case '贰':
case '二':number=2;break;
case '叁':
case '三':number=3;break;
case '肆':
case '四':number=4;break;
case '伍':
case '五':number=5;break;
case '陆':
case '六':number=6;break;
case '柒':
case '七':number=7;break;
case '捌':
case '八':number=8;break;
case '玖':
case '九':number=9;break;
case '拾':
case '十':number=10;break;
case '佰':
case '百':number=100;break;
case '仟':
case '千':number=1000;break;
case '萬':
case '万':number=10000;break;
case '零':
default:number=0;break;
}
return number;
}

static long ToLong(string cnDigit)
{
long result=0;
string[] str=cnDigit.Split('亿');
result=ConverToDigit(str[0]);
if(str.Length>1)
{
result*=100000000;
result+=ConverToDigit(str[1]);
}
return result;
}



//调用
static void Main(string[] args)
{
Console.WriteLine(ToLong("一"));
Console.WriteLine(ToLong("十"));
Console.WriteLine(ToLong("一百"));
Console.WriteLine(ToLong("一千"));
Console.WriteLine(ToLong("一万"));
Console.WriteLine(ToLong("十万"));
Console.WriteLine(ToLong("一百万"));
Console.WriteLine(ToLong("一千万"));
Console.WriteLine(ToLong("一亿"));
Console.WriteLine(ToLong("一万零三"));
Console.WriteLine(ToLong("十亿"));
Console.WriteLine(ToLong("七千一百三十一万五千四百二十一"));
Console.WriteLine(ToLong("一千万零三"));
Console.WriteLine(ToLong("零四百七十万六千"));
Console.WriteLine(ToLong("四百八十"));
Console.WriteLine(ToLong("六千零二十九"));
Console.WriteLine(ToLong("九千九百九十九万九千九百九十九亿九千九百九十九万九千九百九十九"));
Console.Read();
}

/* 运行结果:
1
10
100
1000
10000
100000
1000000
10000000
100000000
10003
1000000000
71315421
10000003
4706000
480
6029
9999999999999999
*/
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 '壹':
case '一':number=1;break;
case '两':
case '贰':
case '二':number=2;break;
case '叁':
case '三':number=3;break;
case '肆':
case '四':number=4;break;
case '伍':
case '五':number=5;break;
case '陆':
case '六':number=6;break;
case '柒':
case '七':number=7;break;
case '捌':
case '八':number=8;break;
case '玖':
case '九':number=9;break;
case '拾':
case '十':number=10;break;
case '佰':
case '百':number=100;break;
case '仟':
case '千':number=1000;break;
case '萬':
case '万':number=10000;break;
case '零':
default:number=0;break;
}
return number;
}

static long ToLong(string cnDigit)
{
long result=0;
string[] str=cnDigit.Split('亿');
result=ConverToDigit(str[0]);
if(str.Length>1)
{
result*=100000000;
result+=ConverToDigit(str[1]);
}
return result;
}



//调用
static void Main(string[] args)
{
Console.WriteLine(ToLong("一"));
Console.WriteLine(ToLong("十"));
Console.WriteLine(ToLong("一百"));
Console.WriteLine(ToLong("一千"));
Console.WriteLine(ToLong("一万"));
Console.WriteLine(ToLong("十万"));
Console.WriteLine(ToLong("一百万"));
Console.WriteLine(ToLong("一千万"));
Console.WriteLine(ToLong("一亿"));
Console.WriteLine(ToLong("一万零三"));
Console.WriteLine(ToLong("十亿"));
Console.WriteLine(ToLong("七千一百三十一万五千四百二十一"));
Console.WriteLine(ToLong("一千万零三"));
Console.WriteLine(ToLong("零四百七十万六千"));
Console.WriteLine(ToLong("四百八十"));
Console.WriteLine(ToLong("六千零二十九"));
Console.WriteLine(ToLong("九千九百九十九万九千九百九十九亿九千九百九十九万九千九百九十九"));
Console.Read();
}

/* 运行结果:
1
10
100
1000
10000
100000
1000000
10000000
100000000
10003
1000000000
71315421
10000003
4706000
480
6029
9999999999999999
*/

0 评论:

发表评论