C#简易实现数字转换为中文的形式

逛园子的时候偶然发现这个题目,自己闲来动手尝试下C#这门语言实现了下。

QQ截图未命名

目前只实现到万万亿的级别,再进一位没有实现。

private static char[] _chrNumArray = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
        private static char[] _chRankArray = { '拾', '佰', '仟', '万', '亿' };
        private static char[] _chSymbolArray = {'负', '正'};

上面是定义了一些查询映射的数组。

public static string Translate(string Num)
        {
            StringBuilder sbNum = new StringBuilder();

            Num = TranslateDigitalSymbol(Num, sbNum);

            int numLength = Num.Length;
            if (numLength > 17)
                return "Out of the range";

            foreach (char chrNum in Num)
            {
                int num = Int32.Parse(chrNum.ToString());
                sbNum.Append(_chrNumArray[num].ToString());
                sbNum.Append(GetRankStr(numLength));
                numLength--;
            }
            return DeleteZeroInStrNum(sbNum.ToString());
        }

这个是唯一对外可用的函数,参数为大数字,支持重载可以为长整型。唯一思想是先每一位数值做翻译,然后是该位所在的位数级别做翻译,当然这个过程中引入了零Rank的错误,接下来就是处理这个,情况很多。自己是想到一个写个测试,然后去实现它,最终完成就是在DeleteZeroInStrNum()这个函数中。

  1. TranslateDigitalSmbol()主要是将第一位的符号进行翻译。仅遇到负号时才生效。
  2. DeleteZeroInStrNum()处理翻译好的字符串中形式不正确的零。例如:10  = 壹拾零;4001 = 肆仟零佰零拾壹;4604111 = 肆佰陆拾零万肆仟壹佰壹拾壹;100000000000000 = 壹佰万零亿等等情况。可能还有些情况没考虑进去,呵呵!希望大侠指教。
 

posted on 2010-03-16 18:53  非常笑  阅读(1613)  评论(0编辑  收藏  举报

导航