人民币大写金额的转换程序

#!/usr/bin/perl

my $money = ;
chomp $money;

my %numberhash=("0"=>"零","1"=>"壹","2"=>"贰","3"=>"叁","4"=>"肆", "5"=>"伍","6"=>"陆","7"=>"柒","8"=>"捌","9"=>"玖");
my @digitarray= ("分","角","元","拾","佰","仟","万","拾","百","仟","亿");


my $result="";
my @int;
my @float;
my $len;
my $i;


if($money=~/\./)
{
@int=split "",$`;#整数部分
@float=split "",$';#小数部分
}
else
{
@int = split "",$money;
}

$len=@int+1;

for(@int)
{
if($_=="0")
{
if($digitarray[$len] eq "万" or $digitarray[$len] eq "元" )
{
$result=$result.$digitarray[$len--];
}
else
{
$result=$result."零";
$len--;
}
}
else
{
$result=$result.$numberhash{$_}.$digitarray[$len--];
}
}

for(@float)
{
$result=$result.$numberhash{$_}.$digitarray[$len--];
}

$result =~ s/零分/整/g; #零分
$result =~ s/零角整/整/g; #零角零分
$result =~ s/亿万/亿/g;

#以下是把一些特殊情况进行修正
for ($i = 1; $i <= 10; $i++)
{
$result =~ s/零万/万/g;
$result =~ s/零元/元/g;
$result =~ s/零零/零/g;
}

for ($money < 1)
{
 $result =~s/元//;
}

print $result."\n";

 

2009.8.24后记:

好久没看space空间,发现这个程序浏览过的人还不少。

说明一下,这个程序已经运行在我们医院的HIS管理软件中,目前没发现什么问题。

看留言,网友说感觉程序运行结果有问题。

只有感觉是不行的,如果发现大写金额有问题,请留言说明对于哪个数字的大写金额处理有问题。

我先说一下,在金额小于0.01元的情况下,这个程序结果是错的,不过这对我们医院没有影响,因为打发票不会出现这种情况。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21129783/viewspace-608893/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21129783/viewspace-608893/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值