zhenzaizai 2017-11-24 02:25 采纳率: 50%
浏览 1216
已采纳

大神,写了一个将罗马数字转换成汉字的方法,求大神简化,谢谢了

 private static string NumberToUper(string num)
    {
        string[] sNumber = { "", "十", "百", "千", "万", "十万", "百万", "千万", "亿" };
        string retu = "";
        for (int i = 0; i < num.Length; i++)
        {
            long nums = long.Parse(num.Substring(0, num.Length - i));
            string strOut = (nums % 10).ToString();
            string res = "";
            switch (strOut)
            {
                case "1":
                    res = "一";
                    break;
                case "2":
                    res = "二";
                    break;
                case "3":
                    res = "三";
                    break;
                case "4":
                    res = "四";
                    break;
                case "5":
                    res = "五";
                    break;
                case "6":
                    res = "六";
                    break;
                case "7":
                    res = "七";
                    break;
                case "8":
                    res = "八";
                    break;
                case "9":
                    res = "九";
                    break;
                case "0":
                    res = "零";
                    break;
            }
            if (i > 4 && i < 8)
            {
                res = res + sNumber[i - 4];
            }
            else if (i > 8)
            {
                res = res + sNumber[i - 8];
            }
            else
            {
                res = res + sNumber[i];
            }
            retu = res + retu;
        }
        retu = retu.Replace("零千万", "零");
        retu = retu.Replace("零百万", "零");
        retu = retu.Replace("零十万", "零");
        retu = retu.Replace("零万", "零");
        retu = retu.Replace("零千", "零");
        retu = retu.Replace("零百", "零");
        retu = retu.Replace("零十", "零");
        retu = retu.Replace("零零零零零", "零");
        retu = retu.Replace("零零零零", "零");
        retu = retu.Replace("零零零", "零");
        retu = retu.Replace("零零", "零");
        //将最后一个零去掉
        if (retu.Substring(retu.Length - 1, 1).Equals("零"))
        {
            retu = retu.Remove(retu.Length - 1, 1);
        }
        if (retu.Substring(0, 1).Equals("一") && retu.Substring(1, 1).Equals("十"))//将十前边的一去掉
        {
            retu = retu.Remove(0, 1);
        }
        return retu;
    }
  • 写回答

1条回答 默认 最新

  • zhenzaizai 2017-11-24 03:12
    关注

    这是一位大神写的,用了正则表达式,3行代码解决了,我服了,只有一点小瑕疵,就是没有考虑到十前边是一的情况。
    static string ConvertToChinese(double x)
    {
    string s = x.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
    string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[.]|$))))", "${b}${z}");
    return Regex.Replace(d, ".", m => "负 空零一二三四五六七八九空空空空空空空分角十百千万亿兆京垓秭穰"[m.Value[0] - '-'].ToString());
    }

    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据