C# 取得一个汉字的拼音首字母/金额大写转换

 

#region 取得一个汉字的拼音首字母
        /// <summary>
        /// 取得一个汉字的拼音首字母
        /// </summary>
        /// <param name="cnChar">一个汉字</param>
        /// <returns>首字母</returns>
        public static string GetSpell(string cnChar)
        {
            byte[] arrCN = Encoding.Default.GetBytes(cnChar);
            if (arrCN.Length > 1)
            {
                int area = (short)arrCN[0];
                int pos = (short)arrCN[1];
                int code = (area << 8) + pos;
                int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };
                for (int i = 0; i < 26; i++)
                {
                    int max = 55290;
                    if (i != 25) max = areacode[i + 1];
                    if (areacode[i] <= code && code < max)
                    {
                        return Encoding.Default.GetString(new byte[] { (byte)(65 + i) }).ToUpper();
                    }
                }
                return "*";
            }
            else return cnChar;
        }

        #endregion

        #region 金额大写转换

        private static String[] DX_Num = { "&nbsp;零", "&nbsp;壹", "&nbsp;贰", "&nbsp;叁", "&nbsp;肆", "&nbsp;伍", "&nbsp;陆", "&nbsp;柒", "&nbsp;捌", "&nbsp;玖" };
        private static String[] DX_Yuan = { "&nbsp;元", "&nbsp;拾", "&nbsp;佰", "&nbsp;仟", "&nbsp;万", "&nbsp;拾", "&nbsp;佰", "&nbsp;仟", "&nbsp;亿", "&nbsp;拾", "&nbsp;佰", "&nbsp;仟", "&nbsp;万" };
        private static String[] DW_X = { "&nbsp;角", "&nbsp;分" };

        /// <summary>
        /// 金额小写转中文大写。
        /// 整数支持到万亿;小数部分支持到分(超过两位将进行Banker舍入法处理)
        /// </summary>
        /// <param name="Num">需要转换的双精度浮点数</param>
        /// <returns>转换后的字符串</returns>
        public static String NumGetStr(Double Num)
        {
            string NumStr;//整个数字字符串
            string NumStr_Zh;//整数部分
            string NumSr_X = "";//小数部分
            string NumStr_DQ;//当前的数字字符
            string NumStr_R = "";//返回的字符串

            Num = Math.Round(Num, 2);//四舍五入取两位
            //各种非正常情况处理
            if (Num < 0)
                return "转换失败";
            else if (Num > 9999999999999.99)
                return "金额过大,无法转换";
            else if (Num == 0)
                return DX_Num[0] + DX_Yuan[0];
            else
            {
                NumStr = Num.ToString();
                //分开整数与小数处理
                if (NumStr.IndexOf(".") != -1)
                {
                    NumStr_Zh = NumStr.Substring(0, NumStr.IndexOf("."));
                    NumSr_X = NumStr.Substring(NumStr.IndexOf(".") + 1);
                }
                else
                {
                    NumStr_Zh = NumStr;
                }
                //判断是否有整数部分
                if (int.Parse(NumStr_Zh) > 0)
                {
                    int len = NumStr_Zh.Length - 1;
                    //整数部分转换
                    for (int a = 0; a <= len; a++)
                    {
                        NumStr_DQ = NumStr_Zh.Substring(a, 1);
                        if (int.Parse(NumStr_DQ) != 0)
                        {
                            NumStr_R += DX_Num[int.Parse(NumStr_DQ)] + DX_Yuan[len - a];
                        }
                        else
                        {
                            if ((len - a) == 0 || (len - a) == 4 || (len - a) == 8)
                                NumStr_R += DX_Yuan[len - a];
                            if ((a + 1) <= len)
                            {
                                NumStr_DQ = NumStr_Zh.Substring((a + 1), 1);
                                if (int.Parse(NumStr_DQ) == 0)
                                    continue;
                                else
                                    NumStr_R += DX_Num[0];
                            }
                        }
                    }
                }
                //判断是否含有小数部分
                if (NumSr_X != "" && int.Parse(NumSr_X) > 0)
                {
                    //小数部分转换
                    for (int b = 0; b < NumSr_X.Length; b++)
                    {
                        NumStr_DQ = NumSr_X.Substring(b, 1);
                        if (int.Parse(NumStr_DQ) != 0)
                            NumStr_R += DX_Num[int.Parse(NumStr_DQ)] + DW_X[b];
                        else
                        {
                            if ((b + 1) < NumSr_X.Length)
                            {
                                NumStr_DQ = NumSr_X.Substring((b + 1), 1);
                                if (int.Parse(NumStr_DQ) == 0)
                                    continue;
                            }
                            if (b != (NumSr_X.Length - 1))
                                NumStr_R += DX_Num[0];
                        }
                    }
                }
                else
                {
                    NumStr_R += "整";
                }
                return NumStr_R;
            }
        }
        #endregion
       
       

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值