C#数字转大写

using System;

namespace ManPowerManage.BussinessRule
{
	/// <summary>
	/// DecimalToUpper 的摘要说明。
	/// </summary>
	public class DecimalToUpper
	{
		public DecimalToUpper()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}

		public string ToUpper(decimal d)
		{
			if (d == 0)
				return "零元整";
			
			string je = d.ToString("####.00");
			if (je.Length > 15)
				return "";
			je = new String('0',15 - je.Length) + je;	//若小于15位长,前面补0

			string stry = je.Substring(0,4);								//取得'亿'单元
			string strw = je.Substring(4,4);								//取得'万'单元
			string strg = je.Substring(8,4);								//取得'元'单元
			string strf = je.Substring(13,2);								//取得小数部分
		
			string str1 = "",str2 = "",str3 = "";

			str1 = this.getupper(stry,"亿");								//亿单元的大写
			str2 = this.getupper(strw,"万");								//万单元的大写
			str3 = this.getupper(strg,"元");								//元单元的大写


			string str_y = "", str_w = "";									
			if (je[3] == '0' || je[4] == '0')								//亿和万之间是否有0
				str_y = "零";
			if (je[7] == '0' || je[8] == '0')								//万和元之间是否有0
				str_w = "零";



			string ret = str1 + str_y + str2 + str_w + str3;				//亿,万,元的三个大写合并

			for (int i = 0 ;i < ret.Length;i++)								//去掉前面的"零"			
			{
				if (ret[i] != '零')
				{
					ret = ret.Substring(i);
					break;
				}

			}
			for (int i = ret.Length - 1;i > -1 ;i--)						//去掉最后的"零"	
			{
				if (ret[i] != '零')
				{
					ret = ret.Substring(0,i+1);
					break;
				}
			}
			
			if (ret[ret.Length  - 1] != '元')								//若最后不位不是'元',则加一个'元'字
				ret = ret + "元";

			if (ret == "零零元")											//若为零元,则去掉"元数",结果只要小数部分
				ret = "";
			
			if (strf == "00")												//下面是小数部分的转换
			{
				ret = ret + "整";
			}
			else
			{
				string tmp = "";
				tmp = this.getint(strf[0]);
				if (tmp == "零")
					ret = ret + tmp;
				else
					ret = ret + tmp + "角";

				tmp = this.getint(strf[1]);
				if (tmp == "零")
					ret = ret + "整";
				else
					ret = ret + tmp + "分";
			}

			if (ret[0] == '零')
			{
				ret = ret.Substring(1);										//防止0.03转为"零叁分",而直接转为"叁分"
			}

			return  ret;													//完成,返回

								
		}
		/// <summary>
		/// 把一个单元转为大写,如亿单元,万单元,个单元
		/// </summary>
		/// <param name="str">这个单元的小写数字(4位长,若不足,则前面补零)</param>
		/// <param name="strDW">亿,万,元</param>
		/// <returns>转换结果</returns>
		private string getupper(string str,string strDW)
		{
			if (str == "0000")
				return "";

			string ret = "";
			string tmp1 = this.getint(str[0]) ;
			string tmp2 = this.getint(str[1]) ;
			string tmp3 = this.getint(str[2]) ;
			string tmp4 = this.getint(str[3]) ;
			if (tmp1 != "零")
			{
				ret = ret + tmp1 + "仟";
			}
			else
			{
				ret = ret + tmp1;
			}

			if (tmp2 != "零")
			{
				ret = ret + tmp2 + "佰";
			}
			else
			{
				if (tmp1 != "零")											//保证若有两个零'00',结果只有一个零,下同
					ret = ret + tmp2;
			}

			if (tmp3 != "零")
			{
				ret = ret + tmp3 + "拾";
			}
			else
			{
				if (tmp2 != "零")
					ret = ret + tmp3;
			}

			if (tmp4 != "零")
			{
				ret = ret + tmp4 ;
			}
			
			if (ret[0] == '零')												//若第一个字符是'零',则去掉
				ret = ret.Substring(1);
			if (ret[ret.Length - 1] == '零')								//若最后一个字符是'零',则去掉
				ret = ret.Substring(0,ret.Length - 1);

			return ret + strDW;												//加上本单元的单位
			
		}
		/// <summary>
		/// 单个数字转为大写
		/// </summary>
		/// <param name="c">小写阿拉伯数字 0---9</param>
		/// <returns>大写数字</returns>
		private string getint(char c)
		{
			string str = "";
			switch ( c )
			{
				case '0':
					str = "零";
					break;
				case '1':
					str = "壹";
					break;
				case '2':
					str = "贰";
					break;
				case '3':
					str = "叁";
					break;
				case '4':
					str = "肆";
					break;
				case '5':
					str = "伍";
					break;
				case '6':
					str = "陆";
					break;
				case '7':
					str = "柒";
					break;
				case '8':
					str = "拐";
					break;
				case '9':
					str = "玖";
					break;
			}
			return str;
		}

	}
}

 

using System;

namespace ManPowerManage.BussinessRule
{
 /// <summary>
 /// DecimalToUpper 的摘要说明。
 /// </summary>
 public class DecimalToUpper
 {
  public DecimalToUpper()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  public string ToUpper(decimal d)
  {
   if (d == 0)
    return "零元整";
   
   string je = d.ToString("####.00");
   if (je.Length > 15)
    return "";
   je = new String('0',15 - je.Length) + je; //若小于15位长,前面补0

   string stry = je.Substring(0,4);        //取得'亿'单元
   string strw = je.Substring(4,4);        //取得'万'单元
   string strg = je.Substring(8,4);        //取得'元'单元
   string strf = je.Substring(13,2);        //取得小数部分
  
   string str1 = "",str2 = "",str3 = "";

   str1 = this.getupper(stry,"亿");        //亿单元的大写
   str2 = this.getupper(strw,"万");        //万单元的大写
   str3 = this.getupper(strg,"元");        //元单元的大写


   string str_y = "", str_w = "";         
   if (je[3] == '0' || je[4] == '0')        //亿和万之间是否有0
    str_y = "零";
   if (je[7] == '0' || je[8] == '0')        //万和元之间是否有0
    str_w = "零";

 

   string ret = str1 + str_y + str2 + str_w + str3;    //亿,万,元的三个大写合并

   for (int i = 0 ;i < ret.Length;i++)        //去掉前面的"零"   
   {
    if (ret[i] != '零')
    {
     ret = ret.Substring(i);
     break;
    }

   }
   for (int i = ret.Length - 1;i > -1 ;i--)      //去掉最后的"零" 
   {
    if (ret[i] != '零')
    {
     ret = ret.Substring(0,i+1);
     break;
    }
   }
   
   if (ret[ret.Length  - 1] != '元')        //若最后不位不是'元',则加一个'元'字
    ret = ret + "元";

   if (ret == "零零元")           //若为零元,则去掉"元数",结果只要小数部分
    ret = "";
   
   if (strf == "00")            //下面是小数部分的转换
   {
    ret = ret + "整";
   }
   else
   {
    string tmp = "";
    tmp = this.getint(strf[0]);
    if (tmp == "零")
     ret = ret + tmp;
    else
     ret = ret + tmp + "角";

    tmp = this.getint(strf[1]);
    if (tmp == "零")
     ret = ret + "整";
    else
     ret = ret + tmp + "分";
   }

   if (ret[0] == '零')
   {
    ret = ret.Substring(1);          //防止0.03转为"零叁分",而直接转为"叁分"
   }

   return  ret;             //完成,返回

        
  }
  /// <summary>
  /// 把一个单元转为大写,如亿单元,万单元,个单元
  /// </summary>
  /// <param name="str">这个单元的小写数字(4位长,若不足,则前面补零)</param>
  /// <param name="strDW">亿,万,元</param>
  /// <returns>转换结果</returns>
  private string getupper(string str,string strDW)
  {
   if (str == "0000")
    return "";

   string ret = "";
   string tmp1 = this.getint(str[0]) ;
   string tmp2 = this.getint(str[1]) ;
   string tmp3 = this.getint(str[2]) ;
   string tmp4 = this.getint(str[3]) ;
   if (tmp1 != "零")
   {
    ret = ret + tmp1 + "仟";
   }
   else
   {
    ret = ret + tmp1;
   }

   if (tmp2 != "零")
   {
    ret = ret + tmp2 + "佰";
   }
   else
   {
    if (tmp1 != "零")           //保证若有两个零'00',结果只有一个零,下同
     ret = ret + tmp2;
   }

   if (tmp3 != "零")
   {
    ret = ret + tmp3 + "拾";
   }
   else
   {
    if (tmp2 != "零")
     ret = ret + tmp3;
   }

   if (tmp4 != "零")
   {
    ret = ret + tmp4 ;
   }
   
   if (ret[0] == '零')            //若第一个字符是'零',则去掉
    ret = ret.Substring(1);
   if (ret[ret.Length - 1] == '零')        //若最后一个字符是'零',则去掉
    ret = ret.Substring(0,ret.Length - 1);

   return ret + strDW;            //加上本单元的单位
   
  }
  /// <summary>
  /// 单个数字转为大写
  /// </summary>
  /// <param name="c">小写阿拉伯数字 0---9</param>
  /// <returns>大写数字</returns>
  private string getint(char c)
  {
   string str = "";
   switch ( c )
   {
    case '0':
     str = "零";
     break;
    case '1':
     str = "壹";
     break;
    case '2':
     str = "贰";
     break;
    case '3':
     str = "叁";
     break;
    case '4':
     str = "肆";
     break;
    case '5':
     str = "伍";
     break;
    case '6':
     str = "陆";
     break;
    case '7':
     str = "柒";
     break;

using System;

namespace ManPowerManage.BussinessRule
{
	/// <summary>
	/// DecimalToUpper 的摘要说明。
	/// </summary>
	public class DecimalToUpper
	{
		public DecimalToUpper()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}

		public string ToUpper(decimal d)
		{
			if (d == 0)
				return "零元整";
			
			string je = d.ToString("####.00");
			if (je.Length > 15)
				return "";
			je = new String('0',15 - je.Length) + je;	//若小于15位长,前面补0

			string stry = je.Substring(0,4);								//取得'亿'单元
			string strw = je.Substring(4,4);								//取得'万'单元
			string strg = je.Substring(8,4);								//取得'元'单元
			string strf = je.Substring(13,2);								//取得小数部分
		
			string str1 = "",str2 = "",str3 = "";

			str1 = this.getupper(stry,"亿");								//亿单元的大写
			str2 = this.getupper(strw,"万");								//万单元的大写
			str3 = this.getupper(strg,"元");								//元单元的大写


			string str_y = "", str_w = "";									
			if (je[3] == '0' || je[4] == '0')								//亿和万之间是否有0
				str_y = "零";
			if (je[7] == '0' || je[8] == '0')								//万和元之间是否有0
				str_w = "零";



			string ret = str1 + str_y + str2 + str_w + str3;				//亿,万,元的三个大写合并

			for (int i = 0 ;i < ret.Length;i++)								//去掉前面的"零"			
			{
				if (ret[i] != '零')
				{
					ret = ret.Substring(i);
					break;
				}

			}
			for (int i = ret.Length - 1;i > -1 ;i--)						//去掉最后的"零"	
			{
				if (ret[i] != '零')
				{
					ret = ret.Substring(0,i+1);
					break;
				}
			}
			
			if (ret[ret.Length  - 1] != '元')								//若最后不位不是'元',则加一个'元'字
				ret = ret + "元";

			if (ret == "零零元")											//若为零元,则去掉"元数",结果只要小数部分
				ret = "";
			
			if (strf == "00")												//下面是小数部分的转换
			{
				ret = ret + "整";
			}
			else
			{
				string tmp = "";
				tmp = this.getint(strf[0]);
				if (tmp == "零")
					ret = ret + tmp;
				else
					ret = ret + tmp + "角";

				tmp = this.getint(strf[1]);
				if (tmp == "零")
					ret = ret + "整";
				else
					ret = ret + tmp + "分";
			}

			if (ret[0] == '零')
			{
				ret = ret.Substring(1);										//防止0.03转为"零叁分",而直接转为"叁分"
			}

			return  ret;													//完成,返回

								
		}
		/// <summary>
		/// 把一个单元转为大写,如亿单元,万单元,个单元
		/// </summary>
		/// <param name="str">这个单元的小写数字(4位长,若不足,则前面补零)</param>
		/// <param name="strDW">亿,万,元</param>
		/// <returns>转换结果</returns>
		private string getupper(string str,string strDW)
		{
			if (str == "0000")
				return "";

			string ret = "";
			string tmp1 = this.getint(str[0]) ;
			string tmp2 = this.getint(str[1]) ;
			string tmp3 = this.getint(str[2]) ;
			string tmp4 = this.getint(str[3]) ;
			if (tmp1 != "零")
			{
				ret = ret + tmp1 + "仟";
			}
			else
			{
				ret = ret + tmp1;
			}

			if (tmp2 != "零")
			{
				ret = ret + tmp2 + "佰";
			}
			else
			{
				if (tmp1 != "零")											//保证若有两个零'00',结果只有一个零,下同
					ret = ret + tmp2;
			}

			if (tmp3 != "零")
			{
				ret = ret + tmp3 + "拾";
			}
			else
			{
				if (tmp2 != "零")
					ret = ret + tmp3;
			}

			if (tmp4 != "零")
			{
				ret = ret + tmp4 ;
			}
			
			if (ret[0] == '零')												//若第一个字符是'零',则去掉
				ret = ret.Substring(1);
			if (ret[ret.Length - 1] == '零')								//若最后一个字符是'零',则去掉
				ret = ret.Substring(0,ret.Length - 1);

			return ret + strDW;												//加上本单元的单位
			
		}
		/// <summary>
		/// 单个数字转为大写
		/// </summary>
		/// <param name="c">小写阿拉伯数字 0---9</param>
		/// <returns>大写数字</returns>
		private string getint(char c)
		{
			string str = "";
			switch ( c )
			{
				case '0':
					str = "零";
					break;
				case '1':
					str = "壹";
					break;
				case '2':
					str = "贰";
					break;
				case '3':
					str = "叁";
					break;
				case '4':
					str = "肆";
					break;
				case '5':
					str = "伍";
					break;
				case '6':
					str = "陆";
					break;
				case '7':
					str = "柒";
					break;
				case '8':
					str = "拐";
					break;
				case '9':
					str = "玖";
					break;
			}
			return str;
		}

	}
}



    case '8':
     str = "拐";
     break;
    case '9':
     str = "玖";
     break;
   }
   return str;
  }

 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值