zoukankan      html  css  js  c++  java
  • 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 = 壹佰万零亿等等情况。可能还有些情况没考虑进去,呵呵!希望大侠指教。
     
  • 相关阅读:
    Java笔记(一)Eclipse 操作MySQL数据库的效率问题
    C# 笔记(六)关于switch 语句
    C# 笔记(五)关于static
    arcgis server 9.3初步
    C# 笔记(三)关于结构体变量
    OpenBSD随笔(一)
    Windows 脚本WSH
    Java笔记(二)Eclipse 连接SQlServer
    ArcGIS Server 9.3 JavaScript API实战(二)一个具体的小系统示例介绍
    C#笔记(二)类型转换
  • 原文地址:https://www.cnblogs.com/wxfasdic/p/1687560.html
Copyright © 2011-2022 走看看