string[] bitStr ={ "零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖" };//定義個位數字
string[] medianStr ={ "", "拾", "佰", "仟" };
string[] pointStr ={ "角", "分" };
/// <summary>
/// 在萬億以類的數字
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public string GetCNMoney(decimal value)
{
if (value > 999999999999)
{
return value.ToString("f2");
}
string strValue = value.ToString("f2"); //因爲這一塊用的是f2,保留兩位小數,肯定會有小數點,所以下面先不進行判斷
//得到整數跟小數部分
string integralValue = strValue;
string pointValue = string.Empty;
if (strValue.IndexOf('.') > 0)
{
integralValue = strValue.Substring(0, strValue.IndexOf('.'));
pointValue = strValue.Substring(strValue.IndexOf('.')+1);
}
StringBuilder sb=new StringBuilder();
if (integralValue.Length > 8) //上億的數
{
string tempValue = integralValue.Substring(0, integralValue.Length - 8); //得到億以上部分
sb.Append(GetCNNumber(tempValue));
sb.Append("億");
sb.Append(GetCNNumber(integralValue.Substring(integralValue.Length - 8,4)));
sb.Append("萬");
sb.Append(GetCNNumber(integralValue.Substring(integralValue.Length - 4)));
}
else if (integralValue.Length > 4)
{
string tempValue =integralValue.Substring(0,integralValue.Length - 4); //得到萬以上部分
sb.Append(GetCNNumber(tempValue));
sb.Append("萬");
sb.Append(GetCNNumber(integralValue.Substring(integralValue.Length - 4)));
}
else
{
sb.Append(GetCNNumber(integralValue));
}
sb.Append("圓");
sb.Append(GetCNPoint(pointValue));
return sb.ToString();
}
/// <summary>
/// 得到一萬以內的數的大寫形式
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private string GetCNNumber(string str)
{
//string ret = string.Empty;
StringBuilder sb = new StringBuilder();
int len = str.Length;
//得到1-10000以內的數
for (int i = 0; i < str.Length; i++)
{
int temp = int.Parse(str.Substring(i, 1));
sb.Append(bitStr[temp]);
sb.Append(medianStr[len - 1 - i]);
}
return sb.ToString();
}
/// <summary>
/// 得到角,分
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string GetCNPoint(string str)
{
StringBuilder sb = new StringBuilder();
for(int i=0;i<str.Length;i++)
{
int temp = int.Parse(str.Substring(i, 1));
sb.Append(bitStr[temp]);
sb.Append(pointStr[pointStr.Length - 1 - i]);
}
return sb.ToString();
}