金额转成中文的常用方法
2017-02-26 15:44:44 访问(1476) 赞(0) 踩(0)
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
using SlowX.Functions.Classes;
namespace SlowX.Functions.Functions
{
/// <summary>
/// 金额转成中文的常用方法
/// </summary>
public class MoneyFormatSlowXFunctions
{
/// <summary>
///
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public static string GetMoneyStr(float num)//总
{
try
{
string m_point = "圆";
string m_sign;
int m_len;
//int g_max=20;
int g_dec = 2;
string m_srcint;
string m_srcdec;
string m_retv = "";
int m_cntr = 0;
string m_decstr;
if (num >= 0.00)
{
m_sign = "";
}
else
{
m_sign = "负";
num = num * (-1);
}
m_srcint = num.ToString().Trim();//m_srcint--"5658626456.235"
string[] s_cut = m_srcint.Split(new char[] { '.' });
if (s_cut.Length == 2)
{
if (s_cut[0].ToString().Trim().Length > 15)
{
m_retv = m_sign + m_retv + m_srcint + "转换失败!";
return m_retv;
}
if (s_cut[1].ToString().Trim().Length > 4)
{
m_srcint = m_srcint.Substring(0, m_srcint.Length - (s_cut[1].ToString().Trim().Length - 4));
}
}
else if (s_cut.Length == 1)
{
m_srcint = m_srcint + ".0000";
}
else
{
return num.ToString() + "转换失败!";
}
s_cut = m_srcint.Split(new char[] { '.' }, 2);
m_srcdec = s_cut[1].ToString().Trim();
m_srcdec = m_srcdec + "0000";
m_srcdec = m_srcdec.Substring(0, 4);
m_srcint = s_cut[0].ToString().Trim();
m_len = m_srcint.Length;
string m_chr, m_last = "", m_this = "", m_cnzero = Num2cn("0"), m_cnname, m_lbase, m_tbase = Len2cnbase(m_len);
m_lbase = m_tbase;
for (m_cntr = 1; m_cntr <= m_len; m_cntr++)
{
m_chr = m_srcint.Substring(m_cntr - 1, 1);
m_this = Num2cn(m_chr);
m_cnname = Len2cnname(m_len - m_cntr + 1);
m_tbase = Len2cnbase(m_len - m_cntr + 1);
if (m_lbase == m_tbase)
{
if (m_last == m_cnzero && m_this == m_cnzero)
{ }
else
{
if ((m_this == m_cnzero))
m_retv = m_retv + m_this + "";
else
m_retv = m_retv + m_this + m_cnname;
}
}
else
{
if (m_retv.Length >= 2)
{
if (m_retv.Substring(m_retv.Length - 2, 2) == m_cnzero)
{
m_retv = m_retv.Substring(0, m_retv.Length - 2);
m_last = "";
}
}
m_retv = m_retv + m_lbase;
if (m_last == m_cnzero && m_this == m_cnzero)
{ }
else
{
if ((m_this == m_cnzero))
m_retv = m_retv + m_this + "";
else
m_retv = m_retv + m_this + m_cnname;
}
}
m_lbase = m_tbase;
m_last = m_this;
}
if (m_retv.EndsWith(m_cnzero))
m_retv = m_retv.Substring(0, m_retv.Length - m_cnzero.Length);
if (m_retv.Length - 2 >= 0)
{
if (m_retv.Substring(m_retv.Length - 2, 2) == m_cnzero)
{
m_retv = m_retv.Substring(0, m_retv.Length - 2);
}
}
m_retv = m_retv + m_point;
m_decstr = "";
if (double.Parse(m_srcdec) == 0)
{
if (m_point == "圆")
m_retv = m_retv + "整";
else
m_retv = m_retv + "";
}
else
{
m_len = g_dec;
m_this = "";
m_last = "";
for (m_cntr = m_len; m_cntr > 0; m_cntr--)
{
m_chr = m_srcdec.Substring(m_cntr - 1, 1);
m_this = Num2cn(m_chr);
if (m_point == "圆")
{
m_cnname = Jedec(m_cntr);
if (m_this == m_cnzero && null == m_decstr)
{ }
else
{
if (m_last == m_cnzero && m_this == m_cnzero)
{ }
else
{
if (m_this == m_cnzero)
m_decstr = m_this + "" + m_decstr;
else
m_decstr = m_this + m_cnname + m_decstr;
}
}
}
else
{
m_cnname = "";
if (m_this == m_cnzero && null == m_decstr)
{ }
else
m_decstr = m_this + m_decstr;
}
m_last = m_this;
}
}
string myretu = m_sign + m_retv + m_decstr;
if (myretu.Substring(myretu.Length - 1, 1) == "零")
return myretu.Substring(0, myretu.Length - 1);
else
return myretu;
}
catch
{
return num.ToString() + "转换失败!";
}
}
#region 1--"角" 2--"分"
/// <summary>
///
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
private static string Jedec(int num)
{
string retu = "";
switch (num)
{
case 1:
retu = "角";
break;
case 2:
retu = "分";
break;
case 3:
retu = "厘";
break;
case 4:
retu = "毫";
break;
default:
retu = "";
break;
}
return retu;
}
#endregion
#region cn >=14 && cn<=19--"兆"
/// <summary>
///
/// </summary>
/// <param name="cn"></param>
/// <returns></returns>
private static string Len2cnbase(int cn)
{
string retu = "";
if (cn >= 14 && cn <= 19)
{
retu = "兆";
}
else if (cn >= 9 && cn <= 13)
{
retu = "亿";
}
else if (cn >= 5 && cn <= 8)
{
retu = "万";
}
else if (cn < 5)
{
retu = "";
}
else
{
retu = "N/A";
}
return retu;
}
#endregion
#region 1--"",2--"拾"
/// <summary>
///
/// </summary>
/// <param name="len"></param>
/// <returns></returns>
private static string Len2cnname(int len)
{
string retu = "";
switch (len)
{
case 1:
retu = "";
break;
case 2:
retu = "拾";
break;
case 3:
retu = "佰";
break;
case 4:
retu = "仟";
break;
case 5:
retu = "";
break;
case 6:
retu = "拾";
break;
case 7:
retu = "佰";
break;
case 8:
retu = "仟";
break;
case 9:
retu = "";
break;
case 10:
retu = "拾";
break;
case 11:
retu = "佰";
break;
case 12:
retu = "仟";
break;
case 13:
retu = "万";
break;
case 14:
retu = "";
break;
case 15:
retu = "拾";
break;
case 16:
retu = "佰";
break;
default:
retu = "N/A";
break;
}
return retu;
}
#endregion
#region "0"--"零" 1--"壹"
/// <summary>
///
/// </summary>
/// <param name="numchr"></param>
/// <returns></returns>
private static string Num2cn(string numchr)
{
string retu = "";
switch (numchr)
{
case "0":
retu = "零";
break;
case "1":
retu = "壹";
break;
case "2":
retu = "贰";
break;
case "3":
retu = "叁";
break;
case "4":
retu = "肆";
break;
case "5":
retu = "伍";
break;
case "6":
retu = "陆";
break;
case "7":
retu = "柒";
break;
case "8":
retu = "捌";
break;
case "9":
retu = "玖";
break;
default:
retu = numchr;
break;
}
return retu;
}
#endregion
}
}
标签:
金额转成中文的常用方法 


上一条:
下一条:
相关评论
发表评论