/// <summary>
/// 数字转汉字(支持所有int型数字)
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string NumberToChinese(int number)
{
string[] UNITS = { "", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千" };
string[] NUMS = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
if (number == 0)
{
return NUMS[0];
}
string results = "";
for (int i = number.ToString().Length - 1; i >= 0; i--)
{
int r = (int)(number / (Math.Pow(10, i)));
results += NUMS[r % 10] + UNITS[i];
}
results = results.Replace("零十", "零")
.Replace("零百", "零")
.Replace("零千", "零")
.Replace("亿万", "亿");
results = Regex.Replace(results, "零([万, 亿])", "$1");
results = Regex.Replace(results, "零+", "零");
if (results.StartsWith("一十"))
{
results = results.Substring(1);
}
cutzero:
if (results.EndsWith("零"))
{
results = results.Substring(0, results.Length - 1);
if (results.EndsWith("零"))
{
goto cutzero;
}
}
return results;
}
上面这个版本支持数字更大,代码简洁,下面这个版本思路简单写起来有点复杂,仅供参考,
/// <summary>
/// 数字转一二三(暂时只支持0-999)
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string NumberToChinese(int number)
{
List<string> chineses = new List<string>()
{
"零",
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九",
"十",
"百",
"千",
"万",
"亿",
"兆"
};
if (number <= 10)
{
return chineses[number];
}
else if (number > 10 && number < 1000)
{
if (number.ToString().Length == 2)
{
if (number.ToString()[1].ToString() == "0")
{
return chineses[int.Parse(number.ToString()[0].ToString())] + "十";
}
else if (number.ToString()[0].ToString() == "1")
{
return "十" + chineses[int.Parse(number.ToString()[1].ToString())];
}
else
{
return chineses[int.Parse(number.ToString()[0].ToString())] + "十" + chineses[int.Parse(number.ToString()[1].ToString())];
}
}
else if (number.ToString()[1].ToString() + number.ToString()[2].ToString() == "00")
{
return chineses[int.Parse(number.ToString()[0].ToString())] + "百";
}
else if (number.ToString()[1].ToString() == "0")
{
return chineses[int.Parse(number.ToString()[0].ToString())] + "百零" + chineses[int.Parse(number.ToString()[2].ToString())];
}
else if (number.ToString()[2].ToString() == "0")
{
return chineses[int.Parse(number.ToString()[0].ToString())] + "百" + chineses[int.Parse(number.ToString()[1].ToString())] + "十";
}
else
{
return chineses[int.Parse(number.ToString()[0].ToString())] + "百" + chineses[int.Parse(number.ToString()[1].ToString())] + "十" + chineses[int.Parse(number.ToString()[2].ToString())];
}
}
else
{
return number.ToString();
}
}
大写的汉字也是同理,只要把一二三这些换成壹贰叁就行。