版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/qq_41890694/article/details/87857844
很多时候我们比如金额就需要对数字的小写转换成大写模式,因此我查找了归纳了如下方法,希望能帮到小伙伴。
实现截图::
实现代码::
#region 数字小写转大写
public static string CNumToCh(string X)
{
//数字转换为中文后的数组
string[] num = new string[]
{
"零", "壹", "贰", "叁", "肆",
"伍", "陆", "柒", "捌", "玖"
};
//为数字位数建立一个位数组
string[] digit = new string[]
{
"", "拾", "佰", "仟"
};
//为数字单位建立一个单位数组
string[] units = new string[]
{
"", "万", "亿", "万亿"
};
string returnValue = ""; //返回值
int finger = 0; //字符位置指针
int m = X.Length % 4; //取模
int k = 0;
if (m > 0)
{
k = X.Length / 4 + 1;
}
else
{
k = X.Length / 4;
}
//外层循环,四位一组,每组最后加上单位: ",万亿,",",亿,",",万,"
for (int i = k; i > 0; i--)
{
int L = 4;
if (i == k && m != 0)
L = m;
//得到一组四位数
string four = X.Substring(finger, L);
int l = four.Length;
//内层循环在该组中的每一位数上循环
for (int j = 0; j < l; j++)
{
//处理组中的每一位数加上所在的位
int n = Convert.ToInt32(four.Substring(j, 1));
if (n == 0)
{
if (j < l - 1
&& Convert.ToInt32(four.Substring(j + 1, 1)) > 0
&& !returnValue.EndsWith(num[n]))
{
returnValue += num[n];
}
}
else
{
if (!(n == 1
&& (returnValue.EndsWith(num[0]) | returnValue.Length == 0)
&& j == l - 2))
{
returnValue += num[n];
returnValue += digit[l - j - 1];
}
}
}
finger += L;
//每组最后加上一个单位:",万,",",亿," 等
if (i < k) //如果不是最高位的一组
{
if (Convert.ToInt32(four) != 0)
{
//如果所有4位不全是0则加上单位",万,",",亿,"等
returnValue += units[i - 1];
}
}
else
{
//处理最高位的一组,最后必须加上单位
returnValue += units[i - 1];
}
}
returnValue += "万元整";
return returnValue;
}
#endregion