///
/// 数字转换汉字
///
public static string Rel(int input)
{
string ret = null;
int input2 = Math.Abs(input);
string resource = "零一二三四五六七八九";
string unit = "个十百千万亿兆京垓秭穰沟涧正载极";
if (input > Math.Pow(10, 4 * (unit.Length - unit.IndexOf('万'))))
{
throw new Exception("the input is too big,input:" + input);
}
Func splitNumFunc = (val) => {
int i = 0;
int mod;
int val_ = val;
List splits = new List();
List splitNums;
do
{
mod = val_ % 10;
val_ /= 10;
if (i % 4 == 0)
{
splitNums = new List();
splitNums.Add(mod);
if (splits.Count == 0)
{
splits.Add(splitNums);
}
else
{
splits.Insert(0, splitNums);
}
}
else
{
splitNums = splits[0];
splitNums.Insert(0, mod);
}
i++;
} while (val_ > 0);
return splits;
};
Func hommizationFunc = (data) => {
List builders = new List();
for (int i = 0; i < data.Count; i++)
{
List data2 = data[i];
StringBuilder newVal = new StringBuilder();
for (int j = 0; j < data2.Count;)
{
if (data2[j] == 0)
{
int k = j + 1;
for (; k < data2.Count && data2[k] == 0; k++) ;
//个位不是0,前面补一个零
newVal.Append('零');
j = k;
}
else
{
newVal.Append(resource[data2[j]]).Append(unit[data2.Count - 1 - j]);
j++;
}
}
if (newVal[newVal.Length - 1] == '零' && newVal.Length > 1)
{
newVal.Remove(newVal.Length - 1, 1);
}
else if (newVal[newVal.Length - 1] == '个')
{
newVal.Remove(newVal.Length - 1, 1);
}
if (i == 0 && newVal.Length > 1 && newVal[0] == '一' && newVal[1] == '十')
{//一十 --> 十
newVal.Remove(0, 1);
}
builders.Add(newVal);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < builders.Count; i++)
{//拼接
if (builders.Count == 1)
{//个位数
sb.Append(builders[i]);
}
else
{
if (i == builders.Count - 1)
{//万位以下的
if (builders[i][builders[i].Length - 1] != '零')
{//十位以上的不拼接"零"
sb.Append(builders[i]);
}
}
else
{//万位以上的
if (builders[i][0] != '零')
{//零万零亿之类的不拼接
sb.Append(builders[i]).Append(unit[unit.IndexOf('千') + builders.Count - 1 - i]);
}
}
}
}
return sb.ToString();
};
List ret_split = splitNumFunc(input2);
ret = hommizationFunc(ret_split);
if (input < 0) ret = "-" + ret;
return ret;
}
(8条消息) C#数字转汉字_西西弗斯丶的博客-CSDN博客_c# 数字转汉字