C#:转换成中文数字
代码
/// <summary>
/// 转换成中文数字
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string ToChineseNum(double number)
{
string numList = "零壹贰叁肆伍陆柒捌玖";
string rmbList = "分角元拾佰仟万拾佰仟亿拾佰仟万";
string tempOutString = null;
if (number < 0)
{
number = -number;
tempOutString = "负";
}
if (number > 9999999999999.99)
return "超出范围的人民币值";
//将小数转化为整数字符串
string tempNumberString = Convert.ToInt64(number * 100).ToString();
int tempNmberLength = tempNumberString.Length;
int i = 0;
while (i < tempNmberLength)
{
int oneNumber = Int32.Parse(tempNumberString.Substring(i, 1));
string oneNumberChar = numList.Substring(oneNumber, 1);
string oneNumberUnit = rmbList.Substring(tempNmberLength - i - 1, 1);
if (oneNumberChar != "零")
tempOutString += oneNumberChar + oneNumberUnit;
else
{
if (oneNumberUnit == "亿" || oneNumberUnit == "万" || oneNumberUnit == "元" || oneNumberUnit == "零")
{
while (tempOutString.EndsWith("零"))
{
tempOutString = tempOutString.Substring(0, tempOutString.Length - 1);
}
}
if (oneNumberUnit == "亿" || (oneNumberUnit == "万" && !tempOutString.EndsWith("亿")) || oneNumberUnit == "元")
{
tempOutString += oneNumberUnit;
}
else
{
try
{
bool tempEnd = tempOutString.EndsWith("亿");
bool zeroEnd = tempOutString.EndsWith("零");
if (tempOutString.Length > 1)
{
bool zeroStart = tempOutString.Substring(tempOutString.Length - 2, 2).StartsWith("零");
if (!zeroEnd && (zeroStart || !tempEnd))
tempOutString += oneNumberChar;
}
else
{
if (!zeroEnd && !tempEnd)
tempOutString += oneNumberChar;
}
}
catch
{
return "零元零分";
}
}
}
i += 1;
}
while (tempOutString.EndsWith("零"))
{
tempOutString = tempOutString.Substring(0, tempOutString.Length - 1);
}
if (tempOutString.EndsWith("元") || tempOutString.EndsWith("角"))
{
tempOutString = tempOutString + "整";
}
return tempOutString;
}