关于作者

姓名:

性别:其他

出生日期:--

地区:

联系电话:

QQ:--

婚否:保密
用户名:zhanglindez
笔名:zhanglindez
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



访问统计:
文章个数:16
评论个数:3
留言条数:0




Powered by BlogDriver 2.1

zhanglindez的学习资源博客

 

欢迎访问zhanglindez的博客

文章

将数字转换成汉字格式

将数字转换成汉字

using System;

namespace testWin
{
 /// <summary>
 /// 将数字转换为大写例如:一百二十三形式
 /// </summary>
 public class NumberChange
 {
  protected long intChangeNum;
  private int intLen;
  private string strWord;
  protected int intMax;  //此代码最长转换到亿。位数是9

  public NumberChange(long intNum)
  {
   this.intChangeNum = intNum;
   this.intLen = intNum.ToString().Length;
   this.strWord = intNum.ToString();
   this.intMax = 9;
  }

  /// <summary>
  /// 将数字转化为汉字格式
  /// </summary>
  /// <returns></returns>
  public string ChangeNumberToWord()
  {
   if(intLen == 1)
    return OneNum(Convert.ToInt32(this.intChangeNum));
   
   if(intLen >= 2)
    return LotNum();

   return "";
  }

  /// <summary>
  /// 转换一位数
  /// </summary>
  /// <param name="intIndexNum"></param>
  /// <returns></returns>
  private string OneNum(int intIndexNum)
  {
   switch(intIndexNum)
   {
    case 0:return "";
    case 1:return "一";
    case 2:return "二";
    case 3:return "三";
    case 4:return "四";
    case 5:return "五";
    case 6:return "六";
    case 7:return "七";
    case 8:return "八";
    case 9:return "九";
    default:return "";
   }
  }

  /// <summary>
  /// 由数字所在的位数和大小决定返回的汉字格式
  /// </summary>
  /// <param name="intIndex"></param>
  /// <param name="intIndexNum"></param>
  /// <returns></returns>
  private string GetName(int intIndex,int intIndexNum)
  {
   string strValue = "";
   if(intIndex == 2 && intIndexNum == 1)
    strValue = "";
   else
    strValue += OneNum(intIndexNum);
   if(intIndexNum != 0)
   {
    switch(intIndex)
    {
     case 1:strValue += "";break;
     case 2:strValue += "十";break;
     case 3:strValue += "百";break;
     case 4:strValue += "千";break;
     default:strValue = "";break;
    }
   }
   else
   {
    if(intIndex == 1)
     strValue += "";
    else
     strValue += "零";
   }
   for(int i=0;i<intMax;i=i+4)
   {
    if(intIndex>4+i && intIndex <(4+i+5))
     strValue = GetName(intIndex-4-i,intIndexNum);
   }
   return strValue;
  }

  /// <summary>
  /// 将多位数的汉字格式联合,去除不符合习惯的情况
  /// </summary>
  /// <returns></returns>
  private string LotNum()
  {
   string strGet = "";
   int intSingle;
   for(int a=this.intLen;a>=1;a--)
   {
    intSingle = int.Parse(strWord.Substring(0,1));//取得最大数位上的数字
    strGet += GetName(a,intSingle);
    if(strWord.Length>=1)
     strWord = strWord.Substring(1,strWord.Length-1);
    strGet = this.Digital(a,strGet);
   }
   return ThrowZero(strGet);
  }

  /// <summary>
  /// 位数不同。加上万、亿、兆等
  /// </summary>
  /// <param name="intIndex"></param>
  /// <returns></returns>
  public virtual string Digital(int intIndex,string strGet)
  {
   if(intIndex == 5)
   {
    strGet = ThrowZero(strGet);
    strGet += "万";
   }
   if(intIndex == 9)
   {
    strGet = ThrowZero(strGet);
    strGet += "亿";
   }
   return strGet;
  }

  /// <summary>
  /// 去除多余的零,不需要的零
  /// </summary>
  /// <param name="strValue"></param>
  /// <returns></returns>
  protected string ThrowZero(string strValue)
  {
   string strNew = "";
   for(int i=0;i<strValue.Length - 1;i++)
   {
    if(strValue[i].ToString() != "零")
     strNew += strValue[i].ToString();
    else
    {
     if(strValue[i+1].ToString() != "零")
      strNew += strValue[i].ToString();
    }
   }
   if(strValue[strValue.Length-1].ToString() != "零")
    strNew += strValue[strValue.Length-1].ToString();

   return strNew;
  } 
 }
}

上述代码只转换到千亿。可以对其继承并扩展。如以下代码(转换到兆):

using System;

namespace testWin
{
 /// <summary>
 /// NumChange 的摘要说明。
 /// </summary>
 public class Numhange:NumberChange
 {
  protected long intNum;
  public Numhange(long _intNum):base(_intNum)
  {
   base.intMax = 13;//将位数改成13。兆
   this.intNum = _intNum;
   base.intChangeNum = _intNum;
  }

  public override string Digital(int intIndex, string strGet)
  {
   if(intIndex == 5)
   {
    strGet = ThrowZero(strGet);
    strGet += "万";
   }
   if(intIndex == 9)
   {
    strGet = ThrowZero(strGet);
    strGet += "亿";
   }
   if(intIndex == 13)
   {
    strGet = ThrowZero(strGet);
    strGet += "兆";
   }
   return strGet;
  }

 }
}

- 作者: zhanglindez 2005年12月22日, 星期四 11:01  回复(0) |  引用(0) 加入博采