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 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?