其实很简单,根本用不着写得很长很长。每4位分开,数字后面加上十百千万等,另外再处理掉多余的零就可以了。
view plaincopy to clipboardprint?
static string GetChineseString(double number)
{
string[] cStr = new string[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "", "十", "百", "千" };
string[] unitStr = new string[] { "", "万", "亿", "万", "兆"};
long intPart = (long)number;
string result = string.Empty;
for (int i = 0; i < intPart.ToString().Length; i++)
{
int temp = (int)((long)(intPart / (long)Math.Pow(10, i)) % 10);
if (i % 4 == 0) result = unitStr[(int)i / 4] + result;
result = cStr[temp] + cStr[10 + i % 4] + result;
}
result = Regex.Replace(result, "(零[十百千])+", "零");
result = Regex.Replace(result, "零{2,}", "零");
result = Regex.Replace(result, "零([万亿兆])", "$1");
if(result.Length>1)result = result.TrimEnd('零');
if (number - intPart == 0) return result;
string decimalPart = number.ToString().Split('.')[1];
result += "点";
for (int j = 0; j < decimalPart.Length; j++)
{
int temp = int.Parse(decimalPart[j].ToString());
result += cStr[temp];
}
return result;
}
static string GetChineseString(long number)
{
string[] cStr =new string[] {"零","一","二","三","四","五","六","七","八","九","","十","百","千"};
string[] unitStr = new string[] { "", "万", "亿", "万", "兆" };
string result = string.Empty;
for (int i = 0; i < number.ToString().Length; i++)
{
int temp = (int)((long)(number / (long)Math.Pow(10, i)) % 10);//获取第i位的数字
if (i % 4 == 0) result = unitStr[(int)i / 4] + result;//检查是否需要加上万或亿等
result = cStr[temp] + cStr[10 + i % 4] + result;
}
result = Regex.Replace(result, "(零[十百千])+", "零");
result = Regex.Replace(result, "零{2,}", "零");
result = Regex.Replace(result, "零([万亿兆])", "$1");
if(result.Length>1)result = result.TrimEnd('零');
return result;
}
0 评论:
发表评论