首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#数字金额转成大写汉字.<>

2012-01-31 
C#数字金额转成大写汉字.....在线等如题.在线等~[解决办法]/// summary/// 转换人民币大小金额/// /s

C#数字金额转成大写汉字.....<在线等>
如题.在线等~

[解决办法]
/// <summary> 
/// 转换人民币大小金额 
/// </summary> 
/// <param name="num">金额</param> 
/// <returns>返回大写形式</returns> 
public static string NumToCNum(decimal num)
{
string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字 
string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字 
string str3 = ""; //从原num值中取出的值 
string str4 = ""; //数字的字符串形式 
string str5 = ""; //人民币大写金额形式 
int i; //循环变量 
int j; //num的值乘以100的字符串长度 
string ch1 = ""; //数字的汉语读法 
string ch2 = ""; //数字位的汉字读法 
int nzero = 0; //用来计算连续的零值是几个 
int temp; //从原num值中取出的值 

num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数 
str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式 
j = str4.Length; //找出最高位 
if (j > 15) { return "溢出"; }
str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分 

//循环取出每一位需要转换的值 
for (i = 0; i < j; i++)
{
str3 = str4.Substring(i, 1); //取出需转换的某一位的值 
temp = Convert.ToInt32(str3); //转换为数字 
if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
{
//当所取位数不为元、万、亿、万亿上的数字时 
if (str3 == "0")
{
ch1 = "";
ch2 = "";
nzero = nzero + 1;
}
else
{
if (str3 != "0" && nzero != 0)
{
ch1 = "零" + str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
ch1 = str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
}
}
else
{
//该位是万亿,亿,万,元位等关键位 
if (str3 != "0" && nzero != 0)
{
ch1 = "零" + str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
if (str3 != "0" && nzero == 0)
{
ch1 = str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
if (str3 == "0" && nzero >= 3)
{
ch1 = "";
ch2 = "";
nzero = nzero + 1;
}
else
{
if (j >= 11)
{
ch1 = "";
nzero = nzero + 1;
}
else
{
ch1 = "";
ch2 = str2.Substring(i, 1);
nzero = nzero + 1;
}
}
}
}
}
if (i == (j - 11) || i == (j - 3))
{
//如果该位是亿位或元位,则必须写上 
ch2 = str2.Substring(i, 1);
}
str5 = str5 + ch1 + ch2;

if (i == j - 1 && str3 == "0")
{
//最后一位(分)为0时,加上“整” 


str5 = str5 + '整';
}
}
if (num == 0)
{
str5 = "零元整";
}
return str5;
}

}
[解决办法]
http://blog.csdn.net/kangyanwen2003/archive/2007/08/30/1765201.aspx
[解决办法]

C# code
   /// <summary>        /// 转换数字金额主函数(包括小数)        /// </summary>        /// <param name="str">数字字符串</param>        /// <returns>转换成中文大写后的字符串或者出错信息提示字符串</returns>        public string ConvertSum(string str)        {            if (!IsPositveDecimal(str))                return "格式错误!";            if (Double.Parse(str) > 999999999999.99)                return "金额溢出";            char[] ch = new char[1];            ch[0] = '.'; //小数点            string[] splitstr = null; //定义按小数点分割后的字符串数组            splitstr = str.Split(ch[0]);//按小数点分割字符串            if (splitstr.Length == 1) //只有整数部分                return ConvertData(str) + "圆整";            else //有小数部分            {        string rstr;                rstr = ConvertData(splitstr[0]) + "圆";//转换整数部分                string xiaoshu=ConvertXiaoShu(splitstr[1]);                rstr += (xiaoshu == "") ? "整" : xiaoshu;//转换小数部分                return rstr;            }        }        /// <summary>        /// 判断是否是正数字字符串        /// </summary>        /// <param name="str"> 判断字符串</param>        /// <returns>如果是数字,返回true,否则返回false</returns>        public bool IsPositveDecimal(string str)        {            Decimal d;            try            {                d = Decimal.Parse(str);            }            catch (Exception)            {                return false;            }            if (d > 0)                return true;            else                return false;        }        /// <summary>        /// 转换数字(整数)        /// </summary>        /// <param name="str">需要转换的整数数字字符串</param>        /// <returns>转换成中文大写后的字符串</returns>        public string ConvertData(string str)        {            string tmpstr = "";            string rstr = "";            int strlen = str.Length;            if (strlen <= 4)//数字长度小于四位            {                rstr = ConvertDigit(str);            }            else            {                if (strlen <= 8)//数字长度大于四位,小于八位                {                    tmpstr = str.Substring(strlen - 4, 4);//先截取最后四位数字                    rstr = ConvertDigit(tmpstr);//转换最后四位数字                    tmpstr = str.Substring(0, strlen - 4);//截取其余数字                    //将两次转换的数字加上萬后相连接                    rstr = String.Concat(ConvertDigit(tmpstr) + "萬", rstr);                    rstr = rstr.Replace("零萬", "萬");                    rstr = rstr.Replace("零零", "零");                }                else                    if (strlen <= 12)//数字长度大于八位,小于十二位                    {                        tmpstr = str.Substring(strlen - 4, 4);//先截取最后四位数字                        rstr = ConvertDigit(tmpstr);//转换最后四位数字                        tmpstr = str.Substring(strlen - 8, 4);//再截取四位数字                        rstr = String.Concat(ConvertDigit(tmpstr) + "萬", rstr);                        tmpstr = str.Substring(0, strlen - 8);                        rstr = String.Concat(ConvertDigit(tmpstr) + "億", rstr);                        rstr = rstr.Replace("零億", "億");                        rstr = rstr.Replace("零萬", "零");                        rstr = rstr.Replace("零零", "零");                        rstr = rstr.Replace("零零", "零");                    }            }            strlen = rstr.Length;            if (strlen >= 2)            {                switch (rstr.Substring(strlen - 2, 2))                {                    case "佰零": rstr = rstr.Substring(0, strlen - 2) + "佰"; break;                    case "仟零": rstr = rstr.Substring(0, strlen - 2) + "仟"; break;                    case "萬零": rstr = rstr.Substring(0, strlen - 2) + "萬"; break;                    case "億零": rstr = rstr.Substring(0, strlen - 2) + "億"; break;                }            }            return rstr;        } 


[解决办法]

C# code
/// <summary>        /// 转换数字(小数部分)        /// </summary>        /// <param name="str">需要转换的小数部分数字字符串</param>        /// <returns>转换成中文大写后的字符串</returns>        public string ConvertXiaoShu(string str)        {            int strlen = str.Length;            string rstr;            if (strlen == 1)            {                rstr = ConvertChinese(str) + "角";                return rstr;            }            else            {                string tmpstr = str.Substring(0, 1);                rstr = ConvertChinese(tmpstr) + "角";                tmpstr = str.Substring(1, 1);                rstr += ConvertChinese(tmpstr) + "分";                rstr = rstr.Replace("零分", "");                rstr = rstr.Replace("零角", "");                return rstr;            }        }        /// <summary>        /// 转换数字        /// </summary>        /// <param name="str">转换的字符串(四位以内)</param>        /// <returns></returns>        public string ConvertDigit(string str)        {            int strlen = str.Length;            string rstr = "";            switch (strlen)            {                case 1: rstr = ConvertChinese(str); break;                case 2: rstr = Convert2Digit(str); break;                case 3: rstr = Convert3Digit(str); break;                case 4: rstr = Convert4Digit(str); break;            }            rstr = rstr.Replace("拾零", "拾");            strlen = rstr.Length;            return rstr;        }        /// <summary>        /// 转换四位数字        /// </summary>        public string Convert4Digit(string str)        {            string str1 = str.Substring(0, 1);            string str2 = str.Substring(1, 1);            string str3 = str.Substring(2, 1);            string str4 = str.Substring(3, 1);            string rstring = "";            rstring += ConvertChinese(str1) + "仟";            rstring += ConvertChinese(str2) + "佰";            rstring += ConvertChinese(str3) + "拾";            rstring += ConvertChinese(str4);            rstring = rstring.Replace("零仟", "零");            rstring = rstring.Replace("零佰", "零");            rstring = rstring.Replace("零拾", "零");            rstring = rstring.Replace("零零", "零");            rstring = rstring.Replace("零零", "零");            rstring = rstring.Replace("零零", "零");            return rstring;        }        /// <summary>        /// 转换三位数字        /// </summary>        public string Convert3Digit(string str)        {            string str1 = str.Substring(0, 1);            string str2 = str.Substring(1, 1);            string str3 = str.Substring(2, 1);            string rstring = "";            rstring += ConvertChinese(str1) + "佰";            rstring += ConvertChinese(str2) + "拾";            rstring += ConvertChinese(str3);            rstring = rstring.Replace("零佰", "零");            rstring = rstring.Replace("零拾", "零");            rstring = rstring.Replace("零零", "零");            rstring = rstring.Replace("零零", "零");            return rstring;        }        /// <summary>        /// 转换二位数字        /// </summary>        public string Convert2Digit(string str)        {            string str1 = str.Substring(0, 1);            string str2 = str.Substring(1, 1);            string rstring = "";            rstring += ConvertChinese(str1) + "拾";            rstring += ConvertChinese(str2);            rstring = rstring.Replace("零拾", "零");            rstring = rstring.Replace("零零", "零");            return rstring;        }        /// <summary>        /// 将一位数字转换成中文大写数字        /// </summary>        public string ConvertChinese(string str)        {            //"零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分"            string cstr = "";            switch (str)            {                case "0": cstr = "零"; break;                case "1": cstr = "壹"; break;                case "2": cstr = "贰"; break;                case "3": cstr = "叁"; break;                case "4": cstr = "肆"; break;                case "5": cstr = "伍"; break;                case "6": cstr = "陆"; break;                case "7": cstr = "柒"; break;                case "8": cstr = "捌"; break;                case "9": cstr = "玖"; break;            }            return (cstr);        } 


[解决办法]

JScript code
<script language="javascript" type="text/javascript">function convertCurrency(currencyDigits) {// Constants:var MAXIMUM_NUMBER = 99999999999.99;// Predefine the radix characters and currency symbols for output:var CN_ZERO = "零";var CN_ONE = "壹";var CN_TWO = "贰";var CN_THREE = "叁";var CN_FOUR = "肆";var CN_FIVE = "伍";var CN_SIX = "陆";var CN_SEVEN = "柒";var CN_EIGHT = "捌";var CN_NINE = "玖";var CN_TEN = "拾";var CN_HUNDRED = "佰";var CN_THOUSAND = "仟";var CN_TEN_THOUSAND = "万";var CN_HUNDRED_MILLION = "亿";var CN_SYMBOL = "人民币";var CN_DOLLAR = "元";var CN_TEN_CENT = "角";var CN_CENT = "分";var CN_INTEGER = "整";// Variables:var integral; // Represent integral part of digit number.var decimal; // Represent decimal part of digit number.var outputCharacters; // The output result.var parts;var digits, radices, bigRadices, decimals;var zeroCount;var i, p, d;var quotient, modulus;// Validate input string:currencyDigits = currencyDigits.toString();if (currencyDigits == "") {alert("Empty input!");return "";}if (currencyDigits.match(/[^,.\d]/) != null) {alert("Invalid characters in the input string!");return "";}if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) {alert("Illegal format of digit number!");return "";}// Normalize the format of input digits:currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters.currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning.// Assert the number is not greater than the maximum number.if (Number(currencyDigits) > MAXIMUM_NUMBER) {alert("Too large a number to convert!");return "";}// Process the coversion from currency digits to characters:// Separate integral and decimal parts before processing coversion:parts = currencyDigits.split(".");if (parts.length > 1) {integral = parts[0];decimal = parts[1];// Cut down redundant decimal digits that are after the second.decimal = decimal.substr(0, 2);}else {integral = parts[0];decimal = "";}// Prepare the characters corresponding to the digits:digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE);radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);decimals = new Array(CN_TEN_CENT, CN_CENT);// Start processing:outputCharacters = "";// Process integral part if it is larger than 0:if (Number(integral) > 0) {zeroCount = 0;for (i = 0; i < integral.length; i++) {p = integral.length - i - 1;d = integral.substr(i, 1);quotient = p / 4;modulus = p % 4;if (d == "0") {zeroCount++;}else {if (zeroCount > 0){outputCharacters += digits[0];}zeroCount = 0;outputCharacters += digits[Number(d)] + radices[modulus];}if (modulus == 0 && zeroCount < 4) {outputCharacters += bigRadices[quotient];}}outputCharacters += CN_DOLLAR;}// Process decimal part if there is:if (decimal != "") {for (i = 0; i < decimal.length; i++) {d = decimal.substr(i, 1);if (d != "0") {outputCharacters += digits[Number(d)] + decimals[i];}}}// Confirm and return the final output string:if (outputCharacters == "") {outputCharacters = CN_ZERO + CN_DOLLAR;}if (decimal == "") {outputCharacters += CN_INTEGER;}outputCharacters = CN_SYMBOL + outputCharacters;return outputCharacters;}</script><p>数字金额: <input id="Digits" name="Digits" /> <input id="Convert" onclick="Result.value = convertCurrency(Digits.value);" type="button" name="Convert" value="转 换" /> </p><p>大写金额: <input id="Result" size="60" name="Result" /> </p> 


[解决办法]

C# code
        /// <summary>        /// 把數字轉換成對應的大寫錢數        /// </summary>        /// <param name="strDigital">textbox内要轉換的數字</param>        /// <returns>转换结果</returns>        public string Zhuanhuan(string strDigital)        {            decimal dshuzi;                       dshuzi = decimal.Parse(this.txtDigital.Text.ToString());            if (dshuzi == 0)            {                ret = "零元整";                return ret;            }                       string je = dshuzi.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 = "零";                        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;        } 


[解决办法]

C# code
// 例如:(new Money(200)).ToString() == "贰佰元"namespace Skyiv.Util{  using System.Text;  class Test  {    static void Main()    {      for (;;)      {        System.Console.Write("金额: ");        string  s = System.Console.ReadLine();        decimal m;        try   { m = decimal.Parse(s); }        catch { break; }        System.Console.WriteLine("大写: " + new Money(m));      }    }  }  // 该类重载的 ToString() 方法返回的是大写金额字符串  class Money  {    public string Yuan  = "元";                        // “元”,可以改为“圆”、“卢布”之类    public string Jiao  = "角";                        // “角”,可以改为“拾”    public string Fen   = "分";                        // “分”,可以改为“美分”之类    static string Digit = "零壹贰叁肆伍陆柒捌玖";      // 大写数字    bool   isAllZero    = true;                        // 片段内是否全零    bool   isPreZero    = true;                        // 低一位数字是否是零    bool   Overflow     = false;                       // 溢出标志    long   money100;                                   // 金额*100,即以“分”为单位的金额    long   value;                                      // money100的绝对值    StringBuilder sb    = new StringBuilder();         // 大写金额字符串,逆序    // 只读属性: "零元"    public string ZeroString    {      get { return Digit[0] + Yuan; }    }    // 构造函数    public Money(decimal money)    {      try   { money100 = (long)(money * 100m); }      catch { Overflow = true; }      if (money100 == long.MinValue) Overflow = true;    }    // 重载 ToString() 方法,返回大写金额字符串    public override string ToString()    {      if (Overflow) return "金额超出范围";      if (money100 == 0) return ZeroString;      string [] Unit = { Yuan, "万", "亿", "万", "亿亿" };      value = System.Math.Abs(money100);      ParseSection(true);      for (int i = 0; i < Unit.Length && value > 0; i++)      {        if (isPreZero && !isAllZero) sb.Append(Digit[0]);        if (i == 4 && sb.ToString().EndsWith(Unit[2]))          sb.Remove(sb.Length - Unit[2].Length, Unit[2].Length);        sb.Append(Unit[i]);        ParseSection(false);        if ((i % 2) == 1 && isAllZero)          sb.Remove(sb.Length - Unit[i].Length, Unit[i].Length);      }      if (money100 < 0) sb.Append("负");      return Reverse();    }    // 解析“片段”: “角分(2位)”或“万以内的一段(4位)”    void ParseSection(bool isJiaoFen)    {      string [] Unit = isJiaoFen ?        new string [] { Fen, Jiao } :        new string [] { "", "拾", "佰", "仟" };      isAllZero = true;      for (int i = 0; i < Unit.Length && value > 0; i++)      {        int d = (int)(value % 10);        if (d != 0)        {          if (isPreZero && !isAllZero) sb.Append(Digit[0]);          sb.AppendFormat("{0}{1}", Unit[i], Digit[d]);          isAllZero = false;        }        isPreZero = (d == 0);        value /= 10;      }    }    // 反转字符串    string Reverse()    {      StringBuilder sbReversed = new StringBuilder();      for (int i = sb.Length - 1; i >= 0; i--)        sbReversed.Append(sb[i]);      return sbReversed.ToString();    }  }} 

热点排行