汉语大写数字转换成阿拉伯数字汉语大写数字转换成阿拉伯数字
use strict;
my %Digit2Num=(
#'零'=>0,
'一'=>1,
'二'=>2,
'三'=>3,
'四'=>4,
'五'=>5,
'六'=>6,
'七'=>7,
'八'=>8,
'九'=>9,
);
my %Str2Num=(
'十'=>10,
'百'=>100,
'千'=>1000,
'万'=>10000,
#'亿'=>100000000, );
sub ToNum{
my $numstr=$_[...
汉语大写数字转换成阿拉伯数字
use strict;
my %Digit2Num=(
#'零'=>0,
'一'=>1,
'二'=>2,
'三'=>3,
'四'=>4,
'五'=>5,
'六'=>6,
'七'=>7,
'八'=>8,
'九'=>9,
);
my %Str2Num=(
'十'=>10,
'百'=>100,
'千'=>1000,
'万'=>10000,
#'亿'=>100000000, );
sub ToNum{
my $numstr=$_[0];
my $i=index($numstr,'亿');
($i>-
1)?ToNum2(substr($numstr,0,$i)).sprintf('%08d',ToNum2(substr($numstr,$i+2))):ToNu
m2($numstr)
}
sub ToNum2{
my $numstr=$_[0];
if(length($numstr)==2){
return ($numstr ne '十')?$Digit2Num{$numstr}:10;
} elsif(length($numstr)==0){
return 0
}
my @ch=unpack('(A2)*',$numstr);
my $Len=@ch;
my ($i,$curbase,$maxbase,$num,$find,$Ch);
for(;$i<$Len;$i++){
$Ch=$ch[$i];
next if($Ch eq '零');
$find=$Digit2Num{$Ch};
if($find){
$i+=1;
if($i==$Len){
$num+=$find; last;
}
$curbase =$Str2Num{$ch[$i]};
if($curbase != 10000){
$num+=$find*$curbase } else {
$num+=$find;
$num*=10000;
}
} else {
if($Ch eq '万'){ $num*=10000
} elsif($Ch eq '十'){
$num+=10
} else {print "不识别 $numstr\n"}
}
}
$num
}
my @Lines = (
'一千二百二十一万九千三百五十七亿一千二百二十一万九千零五十七',
'一千二百二十一',
'一千零十',
'一万零一百',
'一千零十一',
'一万零一百十一',
'一千二百十九',
'十亿零十',
'一十一',
'一百十万',
'一',
);
for(@Lines) {
print $_,' ',ToNum($_),"\n";
}
本文档为【汉语大写数字转换成阿拉伯数字】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。