欢迎访问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) 加入博采