LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: KornLee

考考你:如果将数字转换为大写数字?

[复制链接]
发表于 2005-11-16 09:57:07 | 显示全部楼层
五腑投地
回复 支持 反对

使用道具 举报

发表于 2005-11-16 10:03:24 | 显示全部楼层
啧啧。。
回复 支持 反对

使用道具 举报

发表于 2006-2-17 15:28:11 | 显示全部楼层
小弟初学shell编程,我也写了一个,请指正,不过有总数20位的限制。


#!/bin/bash
read -p "input the number:" number
length=${#number}
#从高位到低位取每一位的数
for (( i=0;i<$length;i=i+1 ))
do
        declare -i benwei=i
#按我们中国的习惯四位为一分组进行转换
        declare -i wei_a=(length-i-1)/4
        declare -i wei_b=(length-i-1)%4
        case ${number:benwei:1} in
        1)
        wei="壹"
        ;;
        2)
        wei="贰"
        ;;
        3)
        wei="叁"
        ;;
        4)
        wei="肆"
        ;;
        5)
        wei="伍"
        ;;
        6)
        wei="陆"
        ;;
        7)
        wei="柒"
        ;;
        8)
        wei="捌"
        ;;
        9)
        wei="玖"
        ;;
#对0单独进行判断,下一位如果还为0,则本位的0不转换,个位为0也不转换
        0)
                if [ ${number:benwei+1:1} = 0 ]; then
                wei=""
                elif [ $wei_b = 0 ]; then
                wei=""
                else
                wei="零"
                fi
        esac
#对位权进行说明。如果为万位组,且为第5位(即万位)并且本万位组不全为0,则万位标志置”万“,依此类推。
                if [ $wei_a == 1 -a $wei_b == 0 -a ${number:benwei-3:4} != "0000" ]; then
                flag="万"
                elif [ $wei_a == 2 -a $wei_b == 0 -a ${number:benwei-3:4} != "0000" ]; then
                flag="亿"
                elif [ $wei_a == 3 -a $wei_b == 0 -a ${number:benwei-3:4} != "0000" ]; then
                flag="万亿"
                elif [ $wei_a == 4 -a $wei_b == 0 -a ${number:benwei-3:4} != "0000" ]; then
                flag="亿亿"
                elif [ $wei_b == 1 -a ${number:benwei:1} != 0 ]; then
                flag="拾"
                elif [ $wei_b == 2 -a ${number:benwei:1} != 0 ]; then
                flag="佰"
                elif [ $wei_b == 3 -a ${number:benwei:1} != 0 ]; then
                flag="仟"
                else
                flag=""
                fi
        result=$wei$flag
#不换行输出每一位的值和权
        echo -n $result
#判断第n位后全为0的问题,如果是,则退出循环,不是则继续进行后续位的判断
        for (( j=i+1;j<$length;j=j+1 ))
        do
                if [ ${number:j:1} = 0 ]; then
                lianling_flag=0
                else
                lianling_flag=1
                break
                fi
        done
#连0后的前边位的位权要加上
        if [ $lianling_flag = 0 ]; then
                if [ $wei_a = 1 -a $wei_b != 0 ]; then
                echo "万"
                elif [ $wei_a = 2 -a $wei_b != 0 ]; then
                echo "亿"
                elif [ $wei_a = 3 -a $wei_b != 0 ];then
                echo "万亿"
                elif [ $wei_a = 4 -a $wei_b != 0 ];then
                echo "亿亿"
                fi
        break
        fi
done
echo
回复 支持 反对

使用道具 举报

发表于 2006-2-19 00:16:27 | 显示全部楼层
学习中...
回复 支持 反对

使用道具 举报

发表于 2007-5-16 09:36:37 | 显示全部楼层
我顶! 我顶!我还不会sed&awk 真烦~
回复 支持 反对

使用道具 举报

发表于 2007-5-16 09:56:50 | 显示全部楼层
我来学习啊 好羡慕各位的技术呀 嘎嘎
弱弱的问句为什么我输入0 怎么都没有输出"零"呀? 这也算BUG吧?嘎嘎 0也是数吧!
回复 支持 反对

使用道具 举报

发表于 2007-8-20 14:24:55 | 显示全部楼层
hzq@k-energy:~> echo -e "798541345645\n2342342345" | sed 'y/0123456789/零壹贰叁 肆伍陸柒捌㺵/'
柒㺵捌伍肆壹叁肆伍陸肆伍
贰叁肆贰叁肆贰叁肆伍
不过百、千、万不知道加哪!!
回复 支持 反对

使用道具 举报

发表于 2007-8-20 14:30:17 | 显示全部楼层
看到高手的帖子羡慕的不得了,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表