C#数字金额转换大写金额
自己写的一个数字转换成中文大写数字的方法,没有精确测试,有需要的大家可以参考。
调用方法:this.Literal1.Text = Method.GetChinaNumber(this.TextBox1.Text);
测试结果如下:
12345.67:壹万贰仟叁佰肆拾伍圆陆角柒分(整数小数部分都有的情况)
12345.00:壹万贰仟叁佰肆拾伍圆 (小数为零的情况)
12345:壹万贰仟叁佰肆拾伍圆 (没有小数的情况)
10111:壹万零壹佰壹拾壹圆 (存在一位为零的情况)
10101:壹万零壹佰零壹圆 (存在两位为零的情况)
10001:壹万零壹圆 (三位为零的情况)
10000:壹万 (四为零的情况)
Code
public static class Method
{
//定义一个枚举类型:数字
enum Number
{
零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖
}
//定义一个枚举类型:小数点前面的单位
enum UnitPrice
{
圆, 拾, 佰, 仟, 万
}
//定义一个枚举类型:小数点后面的单位
enum UnitPriceDot
{
分, 角
}
/**//// <summary>
/// 获得中文的大写数字格式
/// </summary>
/// <param name="strNumber">需要转换的数字</param>
/// <returns></returns>
public static string GetChinaNumber(string strNumber)
{
string Integer;
string Decimal;
string strReturnValue = "";
string[] strlst = strNumber.Split('.');
if (strlst.Length == 1)
{
strReturnValue = ConversionNumber(strlst[0].ToString(), true);
}
else
{
Integer = ConversionNumber(strlst[0].ToString(), true);
Decimal = ConversionNumber(strlst[1].ToString(), false);
strReturnValue = Integer + Decimal;
}
return strReturnValue;
}
/**//// <summary>
/// 数字转换:将阿拉伯数字转换成大写的中文数字(只支持精确到万位的数字转换)
/// </summary>
/// <param name="strFigure">数字</param>
/// <param name="blnDecimal">小数点标记:True表示转换整数部分的数字,False表示转换小数部分的数字</param>
/// <returns></returns>
private static string ConversionNumber(string strFigure, Boolean blnDecimal)
{
string show = "";
string strNumber = "";
string strUnit = "";
string strTemp = "";
int j = 0;
char[] n = strFigure.ToCharArray();
for (int i = 0; i < n.Length; i++)
{
strNumber = ((Number)n[i].ToString().ToInt()).ToString();
j = n.Length - 1 - i;
if (blnDecimal)
strUnit = ((UnitPrice)j).ToString();
else
strUnit = ((UnitPriceDot)j).ToString();
strTemp = strNumber + strUnit;
switch (strTemp)
{
case "零仟": strTemp = "零"; break;
case "零佰": strTemp = "零"; break;
case "零拾": strTemp = "零"; break;
case "零圆": strTemp = ""; break;
case "零角": strTemp = ""; break;
case "零分": strTemp = ""; break;
}
show += strTemp;
}
show = show.Replace("零零零", "零");
show = show.Replace("零零", "零");
if (show.EndsWith("零"))
show = show.Replace("零", "");
return show;
}
}
public static class Method
{
//定义一个枚举类型:数字
enum Number
{
零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖
}
//定义一个枚举类型:小数点前面的单位
enum UnitPrice
{
圆, 拾, 佰, 仟, 万
}
//定义一个枚举类型:小数点后面的单位
enum UnitPriceDot
{
分, 角
}
/**//// <summary>
/// 获得中文的大写数字格式
/// </summary>
/// <param name="strNumber">需要转换的数字</param>
/// <returns></returns>
public static string GetChinaNumber(string strNumber)
{
string Integer;
string Decimal;
string strReturnValue = "";
string[] strlst = strNumber.Split('.');
if (strlst.Length == 1)
{
strReturnValue = ConversionNumber(strlst[0].ToString(), true);
}
else
{
Integer = ConversionNumber(strlst[0].ToString(), true);
Decimal = ConversionNumber(strlst[1].ToString(), false);
strReturnValue = Integer + Decimal;
}
return strReturnValue;
}
/**//// <summary>
/// 数字转换:将阿拉伯数字转换成大写的中文数字(只支持精确到万位的数字转换)
/// </summary>
/// <param name="strFigure">数字</param>
/// <param name="blnDecimal">小数点标记:True表示转换整数部分的数字,False表示转换小数部分的数字</param>
/// <returns></returns>
private static string ConversionNumber(string strFigure, Boolean blnDecimal)
{
string show = "";
string strNumber = "";
string strUnit = "";
string strTemp = "";
int j = 0;
char[] n = strFigure.ToCharArray();
for (int i = 0; i < n.Length; i++)
{
strNumber = ((Number)n[i].ToString().ToInt()).ToString();
j = n.Length - 1 - i;
if (blnDecimal)
strUnit = ((UnitPrice)j).ToString();
else
strUnit = ((UnitPriceDot)j).ToString();
strTemp = strNumber + strUnit;
switch (strTemp)
{
case "零仟": strTemp = "零"; break;
case "零佰": strTemp = "零"; break;
case "零拾": strTemp = "零"; break;
case "零圆": strTemp = ""; break;
case "零角": strTemp = ""; break;
case "零分": strTemp = ""; break;
}
show += strTemp;
}
show = show.Replace("零零零", "零");
show = show.Replace("零零", "零");
if (show.EndsWith("零"))
show = show.Replace("零", "");
return show;
}
}