SCO下转换大写金额的SHELL脚本
点击次数:21 次 发布日期:2008-11-29 16:24:21 作者:源代码网
|
#!/bin/ksh #ProgramName:Num2Chn.sh #Programmer:吕永辉(仙桃市信用联社) #首先判断输入的是否为数字 printf"%.2f"$1>/dev/null2>&13>&1||{ echo"输入非法!!!";exit } #定义数字数组 Num[0]="零"Num[1]="壹"Num[2]="贰"Num[3]="叁"Num[4]="肆"Num[5]="伍" Num[6]="陆"Num[7]="柒"Num[8]="捌"Num[9]="玖" #定义金额单位数组 Unit[1]="分"Unit[2]="角"Unit[3]="元"Unit[4]="拾"Unit[5]="佰"Unit[6]="仟" Unit[7]="万"Unit[11]="亿" #处理负数的情况(红字) [`echo$1|grep"-"`]&&{ NumStr=`echo$1|sed"s/^.//"` RedFlag="(红)" }||{ NumStr=$1 RedFlag="" } #初始化输入数字数组 i=1 forTmpCin`printf"%.2f"$NumStr|awk-F".""{print$1$2}"|sed"s/./&/g"` do Nums[$i]=$TmpC i=`expr$i+1` done j=${#Nums[@]}#为循环计数变量附初值为输入数字的长度 k=1#为循环定位变量附初值(用于确定金额单位) ChnNum=""#初始化大写金额字符串 while [$j-eq0]&&break [$k-gt11]&&{ ChnNum=${Num[${Nums[$j]}]}${Unit[`expr$k-8`]}$ChnNum j=`expr$j-1` k=`expr$k+1` continue } [$k-gt7-a$k-lt11]&&{ ChnNum=${Num[${Nums[$j]}]}${Unit[`expr$k-4`]}$ChnNum j=`expr$j-1` k=`expr$k+1` continue } ChnNum=${Num[${Nums[$j]}]}${Unit[$k]}$ChnNum do j=`expr$j-1` k=`expr$k+1` done ChnNum=`echo$RedFlag$ChnNum|sed"s/零分/整/"|sed"s/零角/零/g" |sed"s/零拾/零/g"|sed"s/零佰/零/g"|sed"s/零仟/零/g" |sed"s/零整/整/"|sed"s/零零零零万/零/"` #下面的循环用于去掉字符串中连续的零 while [`echo$ChnNum|grep"零零"`]||{ ChnNum=`echo$ChnNum|sed"s/零元/元/"|sed"s/零万/万/" |sed"s/零亿/亿/"|sed"s/^元//"|sed"s/^零//"|sed"s/^整$/零元&/` break } do ChnNum=`echo$ChnNum|sed"s/零零/零/g"` done echo$ChnNum (调试环境:SCOOpenServer5.0.5、ksh) 源代码网供稿. |
