人民币金额由阿拉伯数值转换成汉字大写数值的函数
2008-09-03 12:17
567 查看
分成四个步骤:
1。数字的转化。阿拉伯数字转换为汉字大写字符
2。整数部分的转化。
分节:四位一组,从个位开始分节
每节转化为汉字大写数值:比如“1234”转化成 “壹仟贰佰叁拾肆万”
每节加上单位:
补零:
整合成最后的数值:
3。 小数不份转化。
十分位转化为‘角’
百分位转化为‘分’
其他位不转化
/// <summary>
/// 判断是否是数字字符串
/// </summary>
/// <param name="str">字符串</param>
/// <returns>true 是数字字符串,false 不是数字字符串</returns>
private bool JudgeNumber(string str)
{
//用正则表达式的方式判断
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^[-]?/d+[.]?/d*$");
return reg.IsMatch(str);
}
/// <summary>
/// 将阿拉伯字符装换位汉字大写字符,比如‘1’转化为‘壹’
/// </summary>
/// <param name="str">阿拉伯字符</param>
/// <returns>汉字大写字符</returns>
private string convertnumtochs(string str)
{
string[] arr = new string[10] {"零" ,"壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
string result="";
switch (str)
{
case "0":
result = arr[0];
break;
case "1":
result = arr[1];
break;
case "2":
result = arr[2];
break;
case "3":
result = arr[3];
break;
case "4":
result = arr[4];
break;
case "5":
result =arr[5];
break;
case "6":
result = arr[6];
break;
case "7":
result = arr[7];
break;
case "8":
result =arr[8];
break;
case "9":
result = arr[9];
break;
}
return result;
}
/// <summary>
/// 将四位阿拉伯数字转化成汉字大写数字,比如'1234' 转化成 '壹仟贰佰叁拾肆'
/// </summary>
/// <param name="num">阿拉伯数字</param>
/// <returns>汉字大写字符</returns>
string convertfournumber(string num)
{
//判断是否阿拉伯数字组成的字符串
if (!JudgeNumber(num))
return "";
//字符串长度超过4个,或者为空,都不处理。
if (num.Length > 4 || num.Length < 1)
return "";
//不足四位的前面补零
if (num.Length < 4)
{
num = "0000" + num;
num = num.Substring(num.Length - 4, 4);
}
//特殊情况
if (num == "0000")
return "";
//临时变量
string result = "";
string temp = "";
string temp1, temp2, temp3;
//处理四位阿拉伯数字
//保留各位字符
temp = num.Substring(0, 1);
temp1 = num.Substring(1, 1);
temp2 = num.Substring(2, 1);
temp3 = num.Substring(3, 1);
//处理千位,为零不处理
if (temp != "0")
result = convertnumtochs(temp) + "仟";
//一起出来十位,百位
if (temp1 != "0" && temp2 != "0") //百位,十位都是非零数字
result = result + convertnumtochs(temp1) + "佰" + convertnumtochs(temp2) + "拾";
else
{
if (temp1 == "0" && temp2 == "0") //百位,十位都为零,但是千位,个位都不为零
{
if(temp != "0" && temp3 != "0")
result = result + "零";//补个零
}
else
{
if (temp1 == "0") //百位为零,十位不为零,千位不为零
{
if(temp != "0")
result = result + "零" + convertnumtochs(temp2) + "拾"; //千位和十位间补零
else
result = result + convertnumtochs(temp2) + "拾"; //千位和十位间补零
}
else//百位不为零,十位为零
{
if (temp3 != "0")//个位不为零
result = result + convertnumtochs(temp1) + "佰" + "零"; //百位和个位间补零
else
result = result + convertnumtochs(temp1) + "佰" ; //百位和个位间补零
}
}
}
//处理个位,为零不处理
temp = num.Substring(3, 1);
if (temp != "0")
result =result+convertnumtochs(temp) ;
//返回值
return result;
}
/// <summary>
/// 将一个数字字符串按照指定长度,和方向,截取成一段段的字符串,比如说123456789,截取长度为4,
/// 从右到左,截取三个字符串,'1','2345','6789'
/// </summary>
/// <param name="str">被截取的字符串</param>
/// <param name="length">截取长度</param>
/// <param name="type">true:从左往右. false:从右到左</param>
/// <returns>分段的列表</returns>
IList<string> breakstring(string str, int length, bool type)
{
//保存返回结果
IList<string> list = new List<string>();
//两种特殊情况,1.截取的字符长度小于1,被截取的字符串长度小于1
if (length < 1)
return list;
if (str.Length < 1)
return list;
//截取的长度大于被截取的字符串长度
if (length >= str.Length)
{
list.Add(str);
return list;
}
string temp;
int positon = 0;//初始位置为零
int i = 0;//截取次数的标量
//从左往右截取字符串
if (type)
{
positon = 0;//初始位置为零
i = 0;//截取次数的标量
while (positon < str.Length)
{
temp = str.Substring(positon, length);
i++;
if (temp != "")
list.Add(temp);
else
break;
positon = positon + length;
}
}
else
{
positon = str.Length - length;
if (positon > length*(-1) && positon < 0)//如果str长度小于length长度
positon = 0;
i = 0;
while (positon >= 0)
{
if (str.Length > length)
temp = str.Substring(positon, length);
else
temp = str;
i++;
str = str.Substring(0, str.Length - temp.Length);
if (temp != "")
list.Add(temp);//保存在列表中的顺序是反的
else
break;
positon = positon - length;
if (positon > length * (-1) && positon < 0)//被截取字符串最后剩下的长度不到截取的长度
positon = 0;
}
}
return list;
}
/// <summary>
/// 将一个阿拉伯整数转化成汉字大写数字字符串,处理的最大数字单位为千万亿亿
/// </summary>
/// <param name="str">阿拉伯字符串</param>
/// <returns>汉字大写数字字符串</returns>
string intconvert(string str)
{
//特殊情况
if (!JudgeNumber(str)) //判断字符串中有没有非数字字符
return "";
if (str.Length < 1) //字符串为空
return "";
//从右往左截断字符串,四位为一组分节
IList<string> list = breakstring(str, 4, false);
IList<string> chslist = new List<string>();
//保留返回结果
string result = "";
//数字分节单位,四位为一组分节
//数字分节后的,段数目
int num = list.Count;
string temp;
//一段段全部转化为汉字大写数字
for (int i = 0; i < 6; i++)
{
if (i > num-1) break;
temp = list[i];
temp = convertfournumber(temp);
chslist.Add(temp);
}
//每一段补充数字单位,低于万位不需要处理
//处理万位段
if (chslist.Count > 1)
{
if (chslist[1] != "")
chslist[1] = chslist[1] + "万";
}
if (chslist.Count == 3)
{
if (chslist[2] != "")
chslist[2] = chslist[2] + "亿";
}
//处理亿位和万亿位段,同时为空不需要处理
if (chslist.Count >= 4)
{
if (chslist[2] != "" || chslist[3] != "")
{
if (chslist[2] != "" && chslist[3] != "")
{
chslist[2] = chslist[2] + "亿";
chslist[3] = chslist[3] + "万";
}
else
{
if (chslist[3] != "")
chslist[3] = chslist[3] + "万亿";
else
chslist[2] = chslist[2] + "亿";
}
}
}
if (chslist.Count == 5)
{
if (chslist[4] != "")
chslist[4] = chslist[4] + "亿亿";
}
//处理亿亿位,万亿亿位段,同时为空不需要处理
if (chslist.Count >= 6)
{
if (chslist[4] != "" || chslist[5] != "")
{
if (chslist[4] != "" && chslist[5] != "")
{
chslist[4] = chslist[4] + "亿亿";
chslist[5] = chslist[5] + "万";
}
else
{
if (chslist[5] != "")
chslist[5] = chslist[5] + "万亿亿";
else
chslist[4] = chslist[4] + "亿亿";
}
}
}
//补中间的零位,主要在有数字的段最前面补零,本节上面第一位为0,上节的最后一位有0,就需要补零
string temp1 ;
string temp2 ;
for (int i =0; i<chslist.Count-1; i++)
{
temp = chslist[i];
if (temp != "" )
{
temp1 = list[i];
temp2 = list[i + 1];
if (temp1.Substring(0, 1) == "0"||temp2.Substring(temp2.Length-1,1)=="0")
chslist[i] = "零" + chslist[i];
}
}
//最后获得结果
for (int i = 0; i < chslist.Count; i++)
result = chslist[i] + result;
//除掉开始的'零'
if (result != "")
{
if (result.Substring(0, 1) == "零")
result = result.Substring(1, result.Length - 1);
}
if (result == "")
result = "零";
return result;
}
//小数部分转化
string decimalconvert(string str)
{
if (!JudgeNumber(str))
return "";
string result = "";
for (int i = 0; i < str.Length; i++)
{
if (i == 0)
result = result +convertnumtochs( str.Substring(i, 1)) + "角";
if(i==1)
result = result +convertnumtochs( str.Substring(i, 1)) + "分";
if (i > 2)
break;
}
return result;
}
//整个数值转化,阿拉伯金额转换为汉字大写金额
string numconvert(string str)
{
if(!JudgeNumber(str))
return "";
int dotpos = str.IndexOf(".");
string intnum = "", decimalnum = "";
if (dotpos < 1)
intnum = str;
else
{
intnum = str.Substring(0, dotpos);
decimalnum = str.Substring(dotpos + 1, str.Length - dotpos - 1);
}
if (intnum != "")
intnum = intconvert(intnum);
if (decimalnum != "")
decimalnum = decimalconvert(decimalnum);
if (intnum == "零" && decimalnum != "")
intnum = "";
if (intnum != "")
intnum = intnum + "元";
return intnum + decimalnum;
}
1。数字的转化。阿拉伯数字转换为汉字大写字符
2。整数部分的转化。
分节:四位一组,从个位开始分节
每节转化为汉字大写数值:比如“1234”转化成 “壹仟贰佰叁拾肆万”
每节加上单位:
补零:
整合成最后的数值:
3。 小数不份转化。
十分位转化为‘角’
百分位转化为‘分’
其他位不转化
/// <summary>
/// 判断是否是数字字符串
/// </summary>
/// <param name="str">字符串</param>
/// <returns>true 是数字字符串,false 不是数字字符串</returns>
private bool JudgeNumber(string str)
{
//用正则表达式的方式判断
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^[-]?/d+[.]?/d*$");
return reg.IsMatch(str);
}
/// <summary>
/// 将阿拉伯字符装换位汉字大写字符,比如‘1’转化为‘壹’
/// </summary>
/// <param name="str">阿拉伯字符</param>
/// <returns>汉字大写字符</returns>
private string convertnumtochs(string str)
{
string[] arr = new string[10] {"零" ,"壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
string result="";
switch (str)
{
case "0":
result = arr[0];
break;
case "1":
result = arr[1];
break;
case "2":
result = arr[2];
break;
case "3":
result = arr[3];
break;
case "4":
result = arr[4];
break;
case "5":
result =arr[5];
break;
case "6":
result = arr[6];
break;
case "7":
result = arr[7];
break;
case "8":
result =arr[8];
break;
case "9":
result = arr[9];
break;
}
return result;
}
/// <summary>
/// 将四位阿拉伯数字转化成汉字大写数字,比如'1234' 转化成 '壹仟贰佰叁拾肆'
/// </summary>
/// <param name="num">阿拉伯数字</param>
/// <returns>汉字大写字符</returns>
string convertfournumber(string num)
{
//判断是否阿拉伯数字组成的字符串
if (!JudgeNumber(num))
return "";
//字符串长度超过4个,或者为空,都不处理。
if (num.Length > 4 || num.Length < 1)
return "";
//不足四位的前面补零
if (num.Length < 4)
{
num = "0000" + num;
num = num.Substring(num.Length - 4, 4);
}
//特殊情况
if (num == "0000")
return "";
//临时变量
string result = "";
string temp = "";
string temp1, temp2, temp3;
//处理四位阿拉伯数字
//保留各位字符
temp = num.Substring(0, 1);
temp1 = num.Substring(1, 1);
temp2 = num.Substring(2, 1);
temp3 = num.Substring(3, 1);
//处理千位,为零不处理
if (temp != "0")
result = convertnumtochs(temp) + "仟";
//一起出来十位,百位
if (temp1 != "0" && temp2 != "0") //百位,十位都是非零数字
result = result + convertnumtochs(temp1) + "佰" + convertnumtochs(temp2) + "拾";
else
{
if (temp1 == "0" && temp2 == "0") //百位,十位都为零,但是千位,个位都不为零
{
if(temp != "0" && temp3 != "0")
result = result + "零";//补个零
}
else
{
if (temp1 == "0") //百位为零,十位不为零,千位不为零
{
if(temp != "0")
result = result + "零" + convertnumtochs(temp2) + "拾"; //千位和十位间补零
else
result = result + convertnumtochs(temp2) + "拾"; //千位和十位间补零
}
else//百位不为零,十位为零
{
if (temp3 != "0")//个位不为零
result = result + convertnumtochs(temp1) + "佰" + "零"; //百位和个位间补零
else
result = result + convertnumtochs(temp1) + "佰" ; //百位和个位间补零
}
}
}
//处理个位,为零不处理
temp = num.Substring(3, 1);
if (temp != "0")
result =result+convertnumtochs(temp) ;
//返回值
return result;
}
/// <summary>
/// 将一个数字字符串按照指定长度,和方向,截取成一段段的字符串,比如说123456789,截取长度为4,
/// 从右到左,截取三个字符串,'1','2345','6789'
/// </summary>
/// <param name="str">被截取的字符串</param>
/// <param name="length">截取长度</param>
/// <param name="type">true:从左往右. false:从右到左</param>
/// <returns>分段的列表</returns>
IList<string> breakstring(string str, int length, bool type)
{
//保存返回结果
IList<string> list = new List<string>();
//两种特殊情况,1.截取的字符长度小于1,被截取的字符串长度小于1
if (length < 1)
return list;
if (str.Length < 1)
return list;
//截取的长度大于被截取的字符串长度
if (length >= str.Length)
{
list.Add(str);
return list;
}
string temp;
int positon = 0;//初始位置为零
int i = 0;//截取次数的标量
//从左往右截取字符串
if (type)
{
positon = 0;//初始位置为零
i = 0;//截取次数的标量
while (positon < str.Length)
{
temp = str.Substring(positon, length);
i++;
if (temp != "")
list.Add(temp);
else
break;
positon = positon + length;
}
}
else
{
positon = str.Length - length;
if (positon > length*(-1) && positon < 0)//如果str长度小于length长度
positon = 0;
i = 0;
while (positon >= 0)
{
if (str.Length > length)
temp = str.Substring(positon, length);
else
temp = str;
i++;
str = str.Substring(0, str.Length - temp.Length);
if (temp != "")
list.Add(temp);//保存在列表中的顺序是反的
else
break;
positon = positon - length;
if (positon > length * (-1) && positon < 0)//被截取字符串最后剩下的长度不到截取的长度
positon = 0;
}
}
return list;
}
/// <summary>
/// 将一个阿拉伯整数转化成汉字大写数字字符串,处理的最大数字单位为千万亿亿
/// </summary>
/// <param name="str">阿拉伯字符串</param>
/// <returns>汉字大写数字字符串</returns>
string intconvert(string str)
{
//特殊情况
if (!JudgeNumber(str)) //判断字符串中有没有非数字字符
return "";
if (str.Length < 1) //字符串为空
return "";
//从右往左截断字符串,四位为一组分节
IList<string> list = breakstring(str, 4, false);
IList<string> chslist = new List<string>();
//保留返回结果
string result = "";
//数字分节单位,四位为一组分节
//数字分节后的,段数目
int num = list.Count;
string temp;
//一段段全部转化为汉字大写数字
for (int i = 0; i < 6; i++)
{
if (i > num-1) break;
temp = list[i];
temp = convertfournumber(temp);
chslist.Add(temp);
}
//每一段补充数字单位,低于万位不需要处理
//处理万位段
if (chslist.Count > 1)
{
if (chslist[1] != "")
chslist[1] = chslist[1] + "万";
}
if (chslist.Count == 3)
{
if (chslist[2] != "")
chslist[2] = chslist[2] + "亿";
}
//处理亿位和万亿位段,同时为空不需要处理
if (chslist.Count >= 4)
{
if (chslist[2] != "" || chslist[3] != "")
{
if (chslist[2] != "" && chslist[3] != "")
{
chslist[2] = chslist[2] + "亿";
chslist[3] = chslist[3] + "万";
}
else
{
if (chslist[3] != "")
chslist[3] = chslist[3] + "万亿";
else
chslist[2] = chslist[2] + "亿";
}
}
}
if (chslist.Count == 5)
{
if (chslist[4] != "")
chslist[4] = chslist[4] + "亿亿";
}
//处理亿亿位,万亿亿位段,同时为空不需要处理
if (chslist.Count >= 6)
{
if (chslist[4] != "" || chslist[5] != "")
{
if (chslist[4] != "" && chslist[5] != "")
{
chslist[4] = chslist[4] + "亿亿";
chslist[5] = chslist[5] + "万";
}
else
{
if (chslist[5] != "")
chslist[5] = chslist[5] + "万亿亿";
else
chslist[4] = chslist[4] + "亿亿";
}
}
}
//补中间的零位,主要在有数字的段最前面补零,本节上面第一位为0,上节的最后一位有0,就需要补零
string temp1 ;
string temp2 ;
for (int i =0; i<chslist.Count-1; i++)
{
temp = chslist[i];
if (temp != "" )
{
temp1 = list[i];
temp2 = list[i + 1];
if (temp1.Substring(0, 1) == "0"||temp2.Substring(temp2.Length-1,1)=="0")
chslist[i] = "零" + chslist[i];
}
}
//最后获得结果
for (int i = 0; i < chslist.Count; i++)
result = chslist[i] + result;
//除掉开始的'零'
if (result != "")
{
if (result.Substring(0, 1) == "零")
result = result.Substring(1, result.Length - 1);
}
if (result == "")
result = "零";
return result;
}
//小数部分转化
string decimalconvert(string str)
{
if (!JudgeNumber(str))
return "";
string result = "";
for (int i = 0; i < str.Length; i++)
{
if (i == 0)
result = result +convertnumtochs( str.Substring(i, 1)) + "角";
if(i==1)
result = result +convertnumtochs( str.Substring(i, 1)) + "分";
if (i > 2)
break;
}
return result;
}
//整个数值转化,阿拉伯金额转换为汉字大写金额
string numconvert(string str)
{
if(!JudgeNumber(str))
return "";
int dotpos = str.IndexOf(".");
string intnum = "", decimalnum = "";
if (dotpos < 1)
intnum = str;
else
{
intnum = str.Substring(0, dotpos);
decimalnum = str.Substring(dotpos + 1, str.Length - dotpos - 1);
}
if (intnum != "")
intnum = intconvert(intnum);
if (decimalnum != "")
decimalnum = decimalconvert(decimalnum);
if (intnum == "零" && decimalnum != "")
intnum = "";
if (intnum != "")
intnum = intnum + "元";
return intnum + decimalnum;
}
相关文章推荐
- 写一个程序,语言不限,能将人民币金额从阿拉伯数字转换为大写汉字表示。例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。
- 人民币阿拉伯数字转换为汉字大写 code
- js-练习:输入阿拉伯数字的金额,转换成大写汉字输出
- 金额转换,阿拉伯数字的金额转换成中国传统大写汉字的形式
- Excel 数值转换为人民币大写金额字符串
- JS将数字金额转换为大写人民币汉字
- 把阿拉伯数字转换为大写汉字[对应金额]
- 转换人民币大小金额(阿拉伯数字表示的RMB变成汉字RMB)
- 易语言将数值转换为人民币金额的简体或繁体大写形式
- C#中利用正则表达式将人民币金额转换为大写汉字
- JS实现将数字金额转换为大写人民币汉字的方法
- 在SQL中小写金额转换成大写的函数(转)
- 求小写金额转换成大写金额的函数-js
- 把货币金额转换成大写的函数(水晶报表BASIC语言版)
- 阿拉伯数字转换成金额大写金额(包括小数)
- ms sql server 中的金额阿拉伯数字转换为中文的自定义函数
- JS实现将人民币金额转换为大写的示例代码
- 关于转换大写中文金额-新学的java函数整理
- C# 人民币大小写转换,将阿拉伯数字转换为中文的大写人民币
- 小写金额转换成大写 - 函数脚本