当前位置:编程学习 > asp >>

一个简单的整型值转大写汉字字符串的小程序

最近开发的系统中要求将阿拉伯数值转换为大写汉字字符串,在网上搜了一下,转换的程式很多,但大都很长,动辄上百行,想了下,似乎不用费太多时间,于是自己写了一个扩展方法。


public static string ToUpperZh(this int num) 

    string upperMap = "零壹贰叁肆伍陆柒捌玖"; 
    string prefix = num < 0 ? "负" : string.Empty; 
    num = Math.Abs(num); 
    if (num < 10) 
        return prefix + upperMap[num]; 
    string unitMap = "拾佰仟万拾佰仟亿拾佰"; // 整型值最大 20 多亿,所以到佰亿即可 
    string strNum = num.ToString(); 
    int len = strNum.Length; 
    List<char> tmp = new List<char>(); 
    for (int i = len - 1; i >= 0; --i) 
    { 
        tmp.Add(upperMap[int.Parse(strNum[i].ToString())]); 
        tmp.Add(unitMap[len - 1 - i]); 
    } 
    len = tmp.Count; 
    string result = String.Empty; 
    for (int i = len - 1; i >= 0; --i) 
        result += tmp[i]; 
    result = result.Trim(unitMap.ToCharArray()); 
    result = System.Text.RegularExpressions.Regex.Replace(result, @"(零[" + unitMap + "])+", m => 
    { 
        string v = m.Value; 
        int index = v.IndexOf('亿'); 
        int mLen = m.Length; 
        if (index != -1) 
            return index == mLen - 1 ? "亿" : "亿零"; 
        index = v.IndexOf('万'); 
        if (index != -1 && mLen < 8) // 如果是 "零仟零佰零拾零万"(此时 mLen = 8),则返回 "零" 
            return index == mLen - 1 ? "万" : "万零"; 
        return "零"; 
    }); 
    return prefix + result.TrimEnd('零'); 
}  www.zzzyk.com

要转换金额的话,再处理一下小数就可以了。要支持长整型的话,往 unitMap 后添加位数,千万亿及以下应该是没什么大问题的,不过没具体测试过。


摘自 orain的专栏
 

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,