一个简单的整型值转大写汉字字符串的小程序
最近开发的系统中要求将阿拉伯数值转换为大写汉字字符串,在网上搜了一下,转换的程式很多,但大都很长,动辄上百行,想了下,似乎不用费太多时间,于是自己写了一个扩展方法。
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的专栏
相关新闻>>
- 发表评论
-
- 最新评论 更多>>