#!/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;
}
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/