将一串数字转化为中文字符串,使用 C# 将数字转换成大写人民币 (例如:用户输入2300,系统就会显示两千三百元 )
来源:互联网 发布:淘宝vip会员设置 编辑:程序博客网 时间:2024/05/01 06:07
用户在输入数字的时候,系统自动会将此数字转换成人民币显示,比如用户输入2300,系统就会显示两千三百元
我比较懒,一般会先百度一下什么的,有倒是有不过不太好(个人观点)
http://www.cnblogs.com/dxiao/articles/1216262.html
哈哈我一般对有意思的事情都比较感兴趣……嘻嘻嘻 于是我从2个小时前开始写,终于较未完美的完成了
拉了一个button两个textbox 废话就不多加了 注释的还行o(∩_∩)o...哈哈 这个东西有点意思
#region 转化部分
#region 输入框事件 限制为只能输入数字
private void tbNumber_TextChanged(object sender, EventArgs e)
{
string temp = tbNumber.Text.Trim();
if (temp != "")
{
if (!IsNumber(temp) || temp.Length > 32 || (temp.Length == 1 && temp == "0"))
tbNumber.Text = temp.Substring(0, temp.Length - 1);
}
if (temp.StartsWith("0"))
tbNumber.Text = temp.Substring(1, temp.Length - 1);
if (tbNumber.Text != "")
{
btnSayRMB.Enabled = true; btnRead.Enabled = true;
}
else
{
btnSayRMB.Enabled = false; btnRead.Enabled = false;
}
}
#endregion
#region 判断是否是数字
/// <summary>
/// 判断是否是数字
/// </summary>
/// <param name="strNumber"></param>
/// <returns></returns>
public bool IsNumber(String strNumber)
{
Regex objNotNumberPattern = new Regex("[^0-9.-]");
Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*");
Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*");
String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";
String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$";
Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")");
return !objNotNumberPattern.IsMatch(strNumber) &&
!objTwoDotPattern.IsMatch(strNumber) &&
!objTwoMinusPattern.IsMatch(strNumber) &&
objNumberPattern.IsMatch(strNumber);
}
#endregion
#region 转化按钮
//翻译
private void btnSayRMB_Click(object sender, EventArgs e)
{
lbRmb.Text = IntToCHN(tbNumber.Text) + "元";//转化为人民币
}
#endregion
#region 转化函数
/// <summary>
/// 转化函数
/// </summary>
/// <param name="IntStr">需要转化的字符串</param>
/// <returns>转化完后的字符串</returns>
private string IntToCHN(string IntStr)
{
StringBuilder retval = new StringBuilder();//用来存放中文形式的数字
string[] SubNumStr = SubSectionNumStr(IntStr);//用来存放以亿为单位的字符串数组
for (int i = 0; i < SubNumStr.Length; i++)
{
string OneStr = ManageStrZero(SubNumStr[i].ToString());//需要判断有多个“0”的情况
char[] chars = OneStr.ToCharArray(); //存储字符
int tempcount = chars.Length;//用来记录位数
foreach (char c in chars)
{
if (i != SubNumStr.Length - 1 && SubNumStr.Length > 1)
retval.Append(NumParseToText(c, tempcount - 1, true));//当整体数值大于亿时需要进位
else
retval.Append(NumParseToText(c, tempcount - 1, false));
if (tempcount > 0)
tempcount--;//向后移位
}
}
return NumStrNodeManage(retval.ToString());
}
#endregion
#region 将字符串以亿为单位拆分为字符数组
/// <summary>
/// 将字符串以亿为单位拆分为字符数组
/// </summary>
/// <param name="NumStr">字符串</param>
/// <returns>得到用“|”号隔开的字符串数组</returns>
private string[] SubSectionNumStr(string NumStr)
{
StringBuilder temp = new StringBuilder();
int Howm = NumStr.Length / 9;
if (NumStr.Length > 9)
{
for (int i = 0; i < Howm; i++)
{
temp.Insert(0,"|" + NumStr.Substring(NumStr.Length - 9, 9));
NumStr = NumStr.Remove(NumStr.Length - 9, 9);
}
if (NumStr!="")
temp.Insert(0,NumStr);
return temp.ToString().Split('|');
}
else
return NumStr.Split();
}
#endregion
#region 判断有多个“0”的情况
/// <summary>
/// 判断有多个“0”的情况
/// </summary>
/// <param name="ZeroStr">处理字符</param>
/// <returns>多个零处理成“*”号</returns>
private string ManageStrZero(string ZeroStr)
{
return ZeroStr.Replace("00000000", "*******0").Replace("0000000", "******0").Replace("000000", "*****0").Replace("00000", "****0").Replace("0000", "***0").Replace("000", "**0").Replace("00", "*0");
}
#endregion
#region 将字符转化为大写的中文形式
/// <summary>
/// 将数字字符转化为大写的中文形式
/// </summary>
/// <param name="str">需要转化的字符</param>
/// <param name="count">位数</param>
/// <param name="moreBill">是否超过9位</param>
/// <returns>返回中文形式的数字字符</returns>
private string NumParseToText(char str, int count,bool moreBill)
{
string retval = "";
switch (str)
{
case '0': retval = "零"; break;
case '1': retval = "壹"; break;
case '2': retval = "贰"; break;
case '3': retval = "叁"; break;
case '4': retval = "肆"; break;
case '5': retval = "伍"; break;
case '6': retval = "陆"; break;
case '7': retval = "柒"; break;
case '8': retval = "捌"; break;
case '9': retval = "玖"; break;
default: break;
}
if (moreBill)
{
count++;//当整体数值大于亿时需要进位
}
if ((str != '0' && str != '*')||count==4||count==8)//当字符为0时不需要加位数但如果过万仍需要:十万 百万 千万 和过亿时需要:十亿 百亿 千亿
{
switch (count.ToString())
{
case "1":
case "5":
case "9":
retval += "拾"; break;
case "2":
case "6":
case "10":
retval += "佰"; break;
case "3":
case "7":
case "11":
retval += "仟"; break;
case "4": retval += "万"; break;
case "8": retval += "亿"; break;
default: break;
}
}
return retval;
}
#endregion
#region 尾数、亿和万节点处理
private string NumStrNodeManage(string Numstr)
{
string TempNumStr = Numstr;
if (Numstr.EndsWith("零"))//如果以零结尾则需要去除
TempNumStr = Numstr.Remove(Numstr.Length - 1);
TempNumStr = TempNumStr.Replace("零零", "亿零").Replace("零万","万零");//数字过亿时会出现亿为转折点因为将多个0处理成一个0时是以亿为一组
return TempNumStr;
}
#endregion
源码资源:http://download.csdn.net/source/836642
http://blog.csdn.net/zwb1101/archive/2008/12/02/3432534.aspx
- 将一串数字转化为中文字符串,使用 C# 将数字转换成大写人民币 (例如:用户输入2300,系统就会显示两千三百元 )
- 将人民币数字转换为中文大写
- 将数字字符串转换为人民币大写
- C# 将小写数字转换为 一般中文大写数字 和 人民币大写数字
- 将数字字符串人民币转化成大写字符串人民币
- PHP将数字金额转化为中文人民币大写
- 将小写数字转化为大写人民币
- ABAP--将数字金额转换为人民币大写字符串
- ABAP--将数字金额转换为人民币大写字符串
- 将数字金额转换为人民币大写字符串
- .net 将数字转换为人民币大写
- C#使用正则表达式将数字转换为大写中文
- 将一串数字转为大写人民币形式
- 将人民币数字转换成大写形式
- 将人民币数字转换成大写形式
- .NET将数字转换为人民币大写;泛型;11.8
- js将数字金额转换为大写人民币
- C#将数字转换为大写
- 约瑟夫环问题
- TreeView控件中结点的自动生成
- Java-Excel报表开发POI(含POI保护工作表功能)
- SCJP5.0(310-055)SCJP6.0(310-065)真题截图版题库低价转让
- 学习VirTools
- 将一串数字转化为中文字符串,使用 C# 将数字转换成大写人民币 (例如:用户输入2300,系统就会显示两千三百元 )
- MBR分区与GPT分区
- Perl 里的模式识别所有的 12 个传统的元字符(所谓十二烂人),
- Daemon tools软件的使用(虚拟光驱软件)
- Structs2中Json插件的Action配置
- PHP与WAP技术
- p2psim 主页
- Perl标量的特有用的函数
- 数据库取表名、列名操作