把浮点数据转换成大写的人民币表示,表示范围从零分~九千九百九十九亿九千九百九十九万九千九百九十九元九角九分(0~999999999999.99),超过最大值范围将抛出异常。
几点说明:
1.大写人民币表示我叫它“GreatMoney”,因为我不知道英文叫什么,Great也有大写的意思,而且“有钱能使鬼推磨”,所以Money是“伟大(Great)”的。
2.超过999999999999.99元就抛出异常,中国2006年国民生成总值才19317亿美元,转换超过999999999999.99元就不给转换了,转换这么大的数字要收费,谁要转换联系我吧!
下面是源码:
using System;
using System.Data;
using System.Configuration;
/// <summary>
/// Summary description for GreatMoney
/// </summary>
public class GreatMoney
{
public GreatMoney()
{
}
/// <summary>
/// 把浮点数据转换成大写的人民币表示,表示范围从0分~9千亿
/// 超过最大范围抛出异常
/// </summary>
/// <param name="douMoney"></param>
/// <returns></returns>
public static string GetGreatMoney(double douMoney)
{
string retstr = "";
string Left = "";
string money = Convert.ToString(douMoney);
int point = 0;
while (point < money.Length && money.Substring(point, 1) != ".")
{
point++;
}
if (point < money.Length - 1)
{
retstr = NumberMoney(Convert.ToInt32(money.Substring(point + 1, 1))) + "角";
if (point < money.Length - 2)
{
retstr += NumberMoney(Convert.ToInt32(money.Substring(point + 2, 1))) + "分";
}
}
else
{
retstr = "零角零分";
}
Left = money.Substring(0, point);
int Mlength = Left.Length;
if (Mlength > 12)
{
throw new Exception("这么大的金额,必须付费才能转换,请联系作者http://blog.csdn.net/zhyuanshan/!");
}
if (Mlength <= 4)
{
retstr = FourPoint(Left) + "元" + retstr;
}
if (Mlength > 4 && Mlength <= 8)
{
retstr = FourPoint(Left.Substring(0, Mlength - 4)) + "万" +
FourPoint(Left.Substring(Mlength - 4, 4)) + "元" + retstr;
}
if (Mlength > 8 && Mlength <= 12)
{
if (Left.Substring(Mlength - 8, 4) == "0000")
{
if (Left.Substring(Mlength - 4, 1) == "0" || Left.Substring(Mlength - 4, 2) == "00" ||
Left.Substring(Mlength - 4, 3) == "000" || Left.Substring(Mlength - 4, 4) == "0000")
{
retstr = FourPoint(Left.Substring(0, Mlength - 8)) + "亿" +
FourPoint(Left.Substring(Mlength - 4, 4)) + "元" + retstr;
}
else
{
retstr = FourPoint(Left.Substring(0, Mlength - 8)) + "亿" + "零" +
FourPoint(Left.Substring(Mlength - 4, 4)) + "元" + retstr;
}
}
else
{
retstr = FourPoint(Left.Substring(0, Mlength - 8)) + "亿" +
FourPoint(Left.Substring(Mlength - 8, 4)) + "万" +
FourPoint(Left.Substring(Mlength - 4, 4)) + "元" + retstr;
}
}
return retstr;
}
/// <summary>
/// 将四位数字转换成大写的人民币格式
/// </summary>
/// <param name="numStr"></param>
/// <returns></returns>
private static string FourPoint(string numStr)
{
string retstr = "";
int i = numStr.Length - 1, j = 0;
while (j < 4 && numStr.Substring(i, 1) == "0")
{
i--; j++;
}
int NumOfZ = 0;
for (; i >= 0 && j < 4; i--, j++)
{
while (i >= 0 && j < 4 && numStr.Substring(i, 1) == "0")
{
if (NumOfZ == 0)
{
retstr = "零" + retstr;
NumOfZ++;
}
i--; j++;
}
if (i >= 0)
{
retstr = NumberMoney(Convert.ToInt32(numStr.Substring(i, 1))) + Money(j) +
retstr;
}
}
return retstr;
}
/// <summary>
/// 返回钱的表示
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
private static string Money(int num)
{
string retstr = "";
switch (num)
{
case 0:
break;
case 1:
retstr = "拾";
break;
case 2:
retstr = "佰";
break;
case 3:
retstr = "仟";
break;
case 4:
retstr = "万";
break;
}
return retstr;
}
/// <summary>
/// 返回各位数字的大写形式
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
private static string NumberMoney(int num)
{
string retstr = "";
switch (num)
{
case 0:
retstr = "零";
break;
case 1:
retstr = "壹";
break;
case 2:
retstr = "贰";
break;
case 3:
retstr = "叁";
break;
case 4:
retstr = "肆";
break;
case 5:
retstr = "伍";
break;
case 6:
retstr = "陆";
break;
case 7:
retstr = "柒";
break;
case 8:
retstr = "捌";
break;
case 9:
retstr = "玖";
break;
}
return retstr;
}
}