将数字转换成中文大写的算法

  //名称:ConvertSignCap
  //参数:number
  //返回:CapNumber
  //描述:将传入的单个数字转换成中文大写形式
  //创建人:刘权 2004-11-16
  public static string ConvertSignCap(int SignNumber)
  {
   string CapNumber="";
   switch(SignNumber)
   {
    case 0:
     CapNumber = "零";
     break;
    case 1:
     CapNumber = "壹";
     break;
    case 2:
     CapNumber = "贰";
     break;
    case 3:
     CapNumber = "叁";
     break;
    case 4:
     CapNumber = "肆";
     break;
    case 5:
     CapNumber = "伍";
     break;
    case 6:
     CapNumber = "陆";
     break;
    case 7:
     CapNumber = "柒";
     break;
    case 8:
     CapNumber = "捌";
     break;
    case 9:
     CapNumber = "玖";
     break;
   }
   return CapNumber;
  }

  //名称:Symbol
  //参数:NumLen,i
  //返回:SymbolStr
  //描述:根据传入的数值长度以及循环位数,返回其标识位
  //创建人:刘权 2004-11-16
  public static string Symbol(int NumLen,int i)
  {
   string SymbolStr = "";
   switch(NumLen)
   {
    case 1:
     SymbolStr="";
     break;
    case 2:
     switch(i)
     {
      case 0:
       SymbolStr="拾";
       break;
      case 1:
       SymbolStr="";
       break;
     }
     break;
    case 3:
     switch(i)
     {
      case 0:
       SymbolStr="佰";
       break;
      case 1:
       SymbolStr="拾";
       break;
      case 2:
       SymbolStr="";
       break;
     }
     break;
    case 4:
     switch(i)
     {
      case 0:
       SymbolStr="仟";
       break;
      case 1:
       SymbolStr="佰";
       break;
      case 2:
       SymbolStr="拾";
       break;
      case 3:
       SymbolStr="";
       break;
     }
     break;
   }
   return SymbolStr;
  }
  //名称:ConvertToCap
  //参数:number
  //返回:CapNumber
  //描述:将传入的金额转换(小数点后面保留2位小数)成中文大写形式
  //创建人:刘权 2004-11-16
  public static string ConvertToCap(double Number)
  {
   string NumberStr = Number.ToString();
   if(NumberStr.IndexOf(".") <= 0)
   {
    NumberStr = NumberStr + ".00";
   }
   string CapStr = "";
   string PartStr1 = "";
   string PartStr2 = "";
   string[] NumArr = NumberStr.Split('.');
   //整数部分
   string FNumber = NumArr[0].ToString();
   //小数部分
   string SNumber = NumArr[1].ToString();
   if(FNumber.Length > 12)
   {
    //不计算大于1兆的金额。
    CapStr = "数值太大,不能计算...";
   }
   else
   {
    //-------1:转换整数部分。
    int FNumberLen = FNumber.Length;
    //万位之内
    if(FNumberLen < 5)
    {
     string IStr1 = ""; 
     for(int i = 0;i < FNumberLen;i++)
     {
      IStr1 = ConvertSignCap(int.Parse(FNumber.Substring(i,1))) + Symbol(FNumberLen,i);
      PartStr1 = PartStr1==""?IStr1:PartStr1 + IStr1;
     }
    }
    //亿位之内
    if(FNumberLen > 4 && FNumberLen < 9)
    {
     string TempStr1 = "";
     string TempStr2 = "";
     string IStr1 = "";
     string IStr2 = "";
     //将值分割成两部分:未超出万位的;超过万位
     string Part1 = FNumber.Substring(FNumberLen-4,4);
     string Part2 = FNumber.Substring(0,FNumberLen-4);
     for(int i = 0;i < Part1.Length;i++)
     {
      IStr1 = ConvertSignCap(int.Parse(Part1.Substring(i,1))) + Symbol(Part1.Length,i);
      TempStr1 = TempStr1==""?IStr1:(TempStr1 + IStr1);
     }
     for(int i = 0;i < Part2.Length;i++)
     {
      IStr2 = ConvertSignCap(int.Parse(Part2.Substring(i,1))) + Symbol(Part2.Length,i);
      TempStr2 = TempStr2==""?IStr2:(TempStr2 + IStr2);
     }
     PartStr1 = TempStr2 + "万" + TempStr1;
    }
    //兆位之内
    if(FNumberLen > 8 && FNumberLen < 13)
    {
     string TempStr1 = "";
     string TempStr2 = "";
     string TempStr3 = "";
     string IStr1 = "";
     string IStr2 = "";
     string IStr3 = "";
     //将值分割成三部分:未超出万位的;超过万位;超出亿位的
     string Part1 = FNumber.Substring(FNumberLen-4,4);
     string Part2 = FNumber.Substring(FNumberLen-8,4);
     string Part3 = FNumber.Substring(0,FNumberLen-8);
     for(int i = 0;i < Part1.Length;i++)
     {
      IStr1 = ConvertSignCap(int.Parse(Part1.Substring(i,1))) + Symbol(Part1.Length,i);
      TempStr1 = TempStr1==""?IStr1:(TempStr1 + IStr1);
     }
     for(int i = 0;i < Part2.Length;i++)
     {
      IStr2 = ConvertSignCap(int.Parse(Part2.Substring(i,1))) + Symbol(Part2.Length,i);
      TempStr2 = TempStr2==""?IStr2:(TempStr2 + IStr2);
     }
     for(int i = 0;i < Part3.Length;i++)
     {
      IStr3 = ConvertSignCap(int.Parse(Part3.Substring(i,1))) + Symbol(Part3.Length,i);
      TempStr3 = TempStr3==""?IStr3:(TempStr3 + IStr3);
     }
     PartStr1 = TempStr3 + "亿" + TempStr2 + "万" + TempStr1;
    }

    //-------2:转换小数部分
    int SNumberLen = SNumber.Length;
    string IStr = "";
    for(int j = 0;j < SNumberLen;j++)
    {
     string SymbolStr = j==0?"角":"分";
     IStr = ConvertSignCap(int.Parse(SNumber.Substring(j,1))) + SymbolStr;
     PartStr2 = PartStr2==""?IStr:(PartStr2 + IStr);
    }
    //将整数部分和小数部分结合
    CapStr = PartStr1 + "元" + PartStr2;
   }
//   CapStr = CapStr.Replace("拾零","拾");
//   CapStr = CapStr.Replace("零拾","零");
//   CapStr = CapStr.Replace("零佰","零");
//   CapStr = CapStr.Replace("零仟","零");
//   CapStr = CapStr.Replace("零零","零");
//   CapStr = CapStr.Replace("零零零","零");
//   CapStr = CapStr.Replace("零零零零","零");
//   CapStr = CapStr.Replace("零零","零");
   return CapStr;
  }
直接调用ConvertToCap方法即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值