C#简易实现数字转换为中文的形式
逛园子的时候偶然发现这个题目,自己闲来动手尝试下C#这门语言实现了下。
目前只实现到万万亿的级别,再进一位没有实现。
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()这个函数中。
- TranslateDigitalSmbol()主要是将第一位的符号进行翻译。仅遇到负号时才生效。
- DeleteZeroInStrNum()处理翻译好的字符串中形式不正确的零。例如:10 = 壹拾零;4001 = 肆仟零佰零拾壹;4604111 = 肆佰陆拾零万肆仟壹佰壹拾壹;100000000000000 = 壹佰万零亿等等情况。可能还有些情况没考虑进去,呵呵!希望大侠指教。