免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5009 | 回复: 16
打印 上一主题 下一主题

[原创]转换金额大写的SHELL程序(绝对通过验证)。  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-09-18 08:51 |只看该作者 |倒序浏览
  1. #!/bin/ksh
  2. # Program Name : Num2Chn.sh
  3. # Programmer   : 吕永辉(仙桃市信用联社)
  4. # 首先判断输入的是否为数字
  5. printf "%.2f" $1 >/dev/null 2>&1 3>&1 || {
  6.    echo "输入非法!!!";exit
  7. }
  8. # 定义数字数组
  9. Num[0]="零" Num[1]="壹" Num[2]="贰" Num[3]="叁" Num[4]="肆" Num[5]="伍"
  10. Num[6]="陆" Num[7]="柒" Num[8]="捌" Num[9]="玖"
  11. # 定义金额单位数组
  12. Unit[1]="分" Unit[2]="角" Unit[3]="元" Unit[4]="拾" Unit[5]="佰" Unit[6]="仟"
  13. Unit[7]="万" Unit[11]="亿"
  14. # 处理负数的情况(红字)
  15. [ `echo $1 | grep "-"` ] && {
  16. NumStr=`echo $1 | sed 's/^.//'`
  17. RedFlag="(红)"
  18. } || {
  19. NumStr=$1
  20. RedFlag=""
  21. }
  22. # 初始化输入数字数组
  23. i=1
  24. for TmpC in `printf "%.2f" $NumStr | awk -F "." '{print $1$2}' | sed 's/./& /g'`
  25. do
  26.   Nums[$i]=$TmpC
  27.   i=`expr $i + 1`
  28. done
  29. j=${#Nums[@]}       # 为循环计数变量附初值为输入数字的长度
  30. k=1                 # 为循环定位变量附初值(用于确定金额单位)
  31. ChnNum=""           # 初始化大写金额字符串
  32. while
  33.   [ $j -eq 0 ] && break
  34.   [ $k -gt 11 ] && {
  35.     ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 8 `]}$ChnNum
  36.     j=`expr $j - 1`
  37.     k=`expr $k + 1`
  38.     continue
  39. }
  40.   [ $k -gt 7 -a $k -lt 11 ] && {
  41.     ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 4 `]}$ChnNum
  42.     j=`expr $j - 1`
  43.     k=`expr $k + 1`
  44.     continue
  45. }
  46.   ChnNum=${Num[${Nums[$j]}]}${Unit[$k]}$ChnNum
  47. do
  48.   j=`expr $j - 1`
  49.   k=`expr $k + 1`
  50. done
  51. ChnNum=`echo $RedFlag$ChnNum | sed 's/零分/整/' | sed 's/零角/零/g' \
  52.             | sed 's/零拾/零/g' | sed 's/零佰/零/g' | sed 's/零仟/零/g'\
  53.             | sed 's/零整/整/' | sed 's/零零零零万/零/'`
  54. # 下面的循环用于去掉字符串中连续的零
  55. while
  56.   [ `echo $ChnNum | grep "零零"` ] || {
  57.      ChnNum=`echo $ChnNum  | sed 's/零元/元/'| sed 's/零万/万/' \
  58.        | sed 's/零亿/亿/' | sed 's/^元//' | sed 's/^零//' | sed 's/^整$/零元&/`
  59.      break
  60. }
  61. do
  62.   ChnNum=`echo $ChnNum | sed 's/零零/零/g'`
  63. done
  64. echo $ChnNum
复制代码

(调试环境:SCO OpenServer 5.0.5 、ksh )     
我把原始脚本传上来,各位可以保存后改名直接拷贝到SCO上执行。

Num2Chn.gif

1.82 KB, 下载次数: 4325

转换金额大写的SHELL脚本

论坛徽章:
0
2 [报告]
发表于 2003-09-18 14:29 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

不错,就是速度太慢!!!

论坛徽章:
0
3 [报告]
发表于 2003-09-19 11:38 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

我copy来作为一个函数使用,怎么总是报错:“syntax error: unexpected end of file”,在函数后面多加个}就好了,但是还是不能运行

论坛徽章:
0
4 [报告]
发表于 2003-09-19 16:52 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

事故,请紧急修复!!

论坛徽章:
0
5 [报告]
发表于 2003-09-19 19:14 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

do
  Nums[$i]=$TmpC
  i=`expr $i + 1`
done
这里不行
j=${#Nums[@]}       # 为循环计数变量附初值为输入数字的长度
这里不行

论坛徽章:
0
6 [报告]
发表于 2003-09-19 22:30 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

1、 此程序比较实用,并且显示出作者的SHELL 功力。银行科技人员中擅长SHELL的人并不多。
   2、我在True64 UNIX 环境下将此程序调试通过,程序直接拷贝,几乎不用修改(ksh).
    3、有一个小毛病,当输入 -0.24 时显示不正确,显示为“(红)元贰角肆分”。原因在于下面一行。
     ChnNum=`echo $ChnNum  | sed 's/零元/元/'| sed 's/零万/万/' \
       | sed 's/零亿/亿/' | sed 's/^元//' | sed 's/^零//' | sed 's/^整$/零元&/`
   4、应该将$RedFlag$ChnNum 组装放在最后,不在中间过程中进行组装。
    echo "${RedFlag}${ChnNum}"

论坛徽章:
0
7 [报告]
发表于 2003-09-20 00:04 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

bash-2.03$  a
awk:语句错 在第 1 行附近
awk:漏出 在第 1 行附近
./a[53]: 语句错在行2 : `|' 非期望的
bash-2.03$

论坛徽章:
0
8 [报告]
发表于 2003-09-20 21:37 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

原帖由 "rooting" 发表:
| sed 's/^零//' | sed 's/^整$/零元&/`
   4、应该将$RedFlag$ChnNum 组装放在最后,不在中间过程中进行组装。
    echo "${RedFlag}${ChnNum}"
  
谢谢你的提醒!

论坛徽章:
0
9 [报告]
发表于 2003-09-23 10:45 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

问一下 转换 10000000的结果正确吗?

论坛徽章:
0
10 [报告]
发表于 2003-09-23 16:05 |只看该作者

[原创]转换金额大写的SHELL程序(绝对通过验证)。

[quote]原帖由 "zhangyh123"]问一下 转换 10000000的结果正确吗?[/quote 发表:
  
  转换 10000000的结果为:壹仟万元整
有问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP