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;
}

大神,写了一个将罗马数字转换成汉字的方法,求大神简化,谢谢了
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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());
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报