SCO下转换大写金额的SHELL脚本

发表于:2007-07-01来源:作者:点击数: 标签:
#!/bin/ksh # Program Name : Num2Chn.sh # Programmer : 吕永辉(仙桃市信用联社) # 首先判断输入的是否为数字 printf "%.2f" $1 /dev/null 21 31 || { echo "输入非法!!!";exit } # 定义数字数组 Num[0]="零" Num[1]="壹" Num[2]="贰" Num[3]="叁" Num[4]="


#!/bin/ksh
# Program Name : Num2Chn.sh
# Programmer : 吕永辉(仙桃市信用联社)
# 首先判断输入的是否为数字
printf "%.2f" $1 >/dev/null 2>&1 3>&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
for TmpC in `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 -eq 0 ] && break
[ $k -gt 11 ] && {
ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 8 `]}$ChnNum
j=`expr $j - 1`
k=`expr $k + 1`
continue
}
[ $k -gt 7 -a $k -lt 11 ] && {
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
(调试环境:SCO OpenServer 5.0.5 、ksh )

原文转自:http://www.ltesting.net