class NumProcess
{
#region 数值大写
private const string Num1 = "壹";
private const string Num2 = "贰";
private const string Num3 = "参";
private const string Num4 = "肆";
private const string Num5 = "伍";
private const string Num6 = "陆";
private const string Num7 = "柒";
private const string Num8 = "捌";
private const string Num9 = "玖";
private const string Num0 = "零";
private const string NumShi = "拾";
private const string NumBai = "佰";
private const string NumQian = "仟";
private const string NumWan = "萬";
private const string NumYi = "亿";
private const string Zheng = "整";
private const string Yuan = "元";
private const string Jiao = "角";
private const string Fen = "分";
#endregion
#region 整数部分大写
private static string GenerateDaXieLng(long lng)
{
if (lng>0 && lng<10)
{
return DaXie(lng);
}
if (lng >=10 && lng < 100)
{
return GenerateDaXieLng(lng/10)+NumShi+GenerateDaXieLng(lng-lng/10*10);
}
if (lng >= 100 && lng < 1000)
{
return GenerateDaXieLng(lng/100)+NumBai
+(((lng-lng/100*100)<10 && (lng-lng/100*100)!=0)?Num0:"")
+GenerateDaXieLng(lng-lng/100*100);
}
if(lng>=1000 && lng<10000)
{
return GenerateDaXieLng(lng/1000)+NumQian
+(((lng-lng/1000*1000)<100 && (lng-lng/1000*1000)!=0)?Num0:"")
+GenerateDaXieLng(lng-lng/1000*1000);
}
if(lng>=10000 && lng<100000000)
{
return GenerateDaXieLng(lng / 10000) + NumWan
+ (((lng - lng / 10000 * 10000) < 1000 && (lng - lng / 10000) != 0) ? Num0 : "")
+ GenerateDaXieLng(lng - lng / 10000 * 10000);
}
if (lng >= 100000000)
{
return GenerateDaXieLng(lng / 10000000) + NumYi
+ ((lng - lng / 100000000 * 100000000 < 10000000 && (lng - lng / 100000000 * 100000000) != 0) ? Num0 : "")
+ GenerateDaXieLng(lng - lng / 100000000 * 100000000);
}
return "";
}
#endregion
#region 获取单个数对应的大写
private static string DaXie(long i)
{
switch(i)
{
case 9:
return Num9;
case 8:
return Num8;
case 7:
return Num7;
case 6:
return Num6;
case 5:
return Num5;
case 4:
return Num4;
case 3:
return Num3;
case 2:
return Num2;
case 1:
return Num1;
default:
return Num0;
}
}
#endregion
#region 获取小数部分大写
private static string GenerateDaXiePoint(decimal dec)
{
if (dec == 0) return Zheng;
string str = dec.ToString();
str = str.Substring(str.IndexOf(".") + 1);
return DaXie(Convert.ToInt64(str.Substring(0,1)))+Jiao+DaXie(Convert.ToInt64(str.Substring(1,1)))+Fen;
}
#endregion
public static string GenerateDaXieNum(decimal dec)
{
string sign="";
if (dec < 0)
{
sign = "负";
dec = -1 * dec;
}
int idec =(int) Math.Truncate(dec);
return sign+ GenerateDaXieLng(idec) + Yuan + GenerateDaXiePoint(dec - idec);
}
}
参考:优快云:http://community.youkuaiyun.com/Expert/topic/4731/4731265.xml?temp=.5906946 xsxcjj同志的算法