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

来源:未知 责任编辑:智问网络 发表时间:2013-11-04 19:50 点击:

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


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.2cto.com

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


摘自 orain的专栏
 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 浅析.NET下XML数据访问新机制
    • asp.net 面试+笔试题目第1/2页
    • C# 邮件地址是否合法的验证
    • C#高级编程:数据库连接[1]
    • asp.net 设置GridView的选中行的实现代码
    • 经典C++程序1
    • IIS 自动回收导致后台定时器失效的问题解决
    • ASP.NET&#160;GridView列表代码示例
    • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1