栏目分类
系统安全 | 服务器安全 | 网络安全 | 木马病毒 | 漏洞补丁 | 防火墙 | 系统安全 | 备份恢复 | 安全策略
系统优化 | 提速 | 优化性能 | 服务 | 清理垃圾
网络技巧 | 网络命令 | 网络技巧 | 网络访问 | 共享 | 网络管理
服务器技术 | Exchange | FTP服务器 | ISAServer | 域服务器 | Web服务器 | SQLServer | 其他服务器
系统技巧 | 系统管理 | 系统技巧 | 注册表 | 进程
windows新手入门 | 系统基础 | 网络基础 | 安装 | 技术前沿
系统故障 | 网络故障 | 开关机故障 | 系统故障 | 软件故障 | 当机故障
资讯动态
排行榜
·玩转XP“多用户”功能(下)
·个人电脑重装WinXP的经验和技巧
·玩转XP“多用户”功能(上)
·高手支招:轻松玩转WindowsXP任务栏
·制作万能克隆版WinXP超全面攻略
·关于WindowsXP常见Internet问题四则
·微软一个关于ShowModalDialog用法的实例网页
·WindowsInternetExplorer问题的一般思路
·优化大师使用技巧
·超一流软硬件资料检测大师AIDA32
·WIndowsXP优化超级精髓
·新版磁盘优化工具集锦(下)
·C#实现阿拉伯数字转换成中文大写金额代码
·Windows2000支持的几种文件系统与比较
·手把手教你做WindowsXP登录界面
·如何制作完美的WinXPVLKSP2集成光盘
·如何让Windows2000系统达到最佳性能
·Win2003最新优化方法大全之二
·深入理解和优化WindowsXP启动
·关于C#中switch语句的一点注意

    您现在的位置: Linux宝库 >> Windows >> 系统优化 >> 优化性能 >> 文章正文
C#实现阿拉伯数字转换成中文大写金额代码
Linux宝库 收集整理  作者:Linux宝库  时间:2007-12-31  收藏本站
来自:http://doc.linuxpk.com/38219.html
联系:linuxmine#gmail.com
分类:[优化性能]
  以下C#代码实现了将阿拉伯数字转换成中文大写金额的功能,并Visual Studio.NET 2003 下调试基本通过(未经严格测试,希望各位发现错误后与作者联系fanz2000@sohu.com,或直接在csdn上回帖告知)。

  代码的主调函数为ConvertSum,它的参数是string类型的数字字符串。在ASP.NET中调用方式如下:

  Label1.Text=ConvertSum("数字字符串");

  其代码如下:

  //作者:fanz2000

  //Email:fanz2000@sohu.com

  ///

  /// 转换数字金额主函数(包括小数)

  ///

  /// 数字字符串

  /// 转换成中文大写后的字符串或者出错信息提示字符串

  public string ConvertSum(string str)

  {

  if(!IsPositveDecimal(str))

  return "输入的不是正数字!";

  if(Double.Parse(str)>999999999999.99)

  return "数字太大,无法换算,请输入一万亿元以下的金额";

  char[] ch=new char[1];

  ch[0]='.'; //小数点

  string[] splitstr=null; //定义按小数点分割后的字符串数组

  splitstr=str.Split(ch[0]);//按小数点分割字符串

  if(splitstr.Length==1) //只有整数部分

  return ConvertData(str)+"圆整";

  else //有小数部分

  {

  string rstr;

  rstr=ConvertData(splitstr[0])+"圆";//转换整数部分

  rstr+=ConvertXiaoShu(splitstr[1]);//转换小数部分

  return rstr;

  }

  }

  ///

  /// 判断是否是正数字字符串

  ///

  /// 判断字符串

  /// 如果是数字,返回true,否则返回false

  public bool IsPositveDecimal(string str)

  {

  Decimal d;

  try

  {

  d=Decimal.Parse(str);

  }

  catch(Exception)

  {

  return false;

  }

  if(d>0)

  return true;

  else

  return false;

  }

  ///

  /// 转换数字(整数)

  ///

  /// 需要转换的整数数字字符串

  /// 转换成中文大写后的字符串

  public string ConvertData(string str)

  {

  string tmpstr="";

  string rstr="";

  int strlen=str.Length;

  if (strlen<=4)//数字长度小于四位

  {

  rstr= ConvertDigit(str);

  }

  else

  {

  if (strlen<=8)//数字长度大于四位,小于八位

  {

  tmpstr=str.Substring(strlen-4,4);//先截取最后四位数字

  rstr=ConvertDigit(tmpstr);//转换最后四位数字

  tmpstr=str.Substring(0,strlen-4);//截取其余数字

  //将两次转换的数字加上孺后相连接

  rstr= String.Concat(ConvertDigit(tmpstr)+"孺",rstr);

  rstr=rstr.Replace("零孺","孺");

  rstr=rstr.Replace("零零","零");

  }

  else

  if(strlen<=12)//数字长度大于八位,小于十二位

  {

  tmpstr=str.Substring(strlen-4,4);//先截取最后四位数字

  rstr=ConvertDigit(tmpstr);//转换最后四位数字

  tmpstr=str.Substring(strlen-8,4);//再截取四位数字

  rstr= String.Concat(ConvertDigit(tmpstr)+"孺",rstr);

  tmpstr=str.Substring(0,strlen-8);

  rstr= String.Concat(ConvertDigit(tmpstr)+"?",rstr);

  rstr=rstr.Replace("零?","?");

  rstr=rstr.Replace("零孺","零");

  rstr=rstr.Replace("零零","零");

  rstr=rstr.Replace("零零","零");

  }

  }

  strlen=rstr.Length;

  if (strlen>=2)

  {

  switch(rstr.Substring(strlen-2,2))

  {

  case "佰零":rstr=rstr.Substring(0,strlen-2)+"佰"; break;

  case "仟零":rstr=rstr.Substring(0,strlen-2)+"仟"; break;

  case "孺零":rstr=rstr.Substring(0,strlen-2)+"孺";break;

  case "?零":rstr=rstr.Substring(0,strlen-2)+"?";break;

  }

  }

  return rstr;

  }

  ///

  /// 转换数字(小数部分)

  ///

  /// 需要转换的小数部分数字字符串

  /// 转换成中文大写后的字符串

  public string ConvertXiaoShu(string str)

  {

  int strlen=str.Length ;

  string rstr;

  if(strlen==1)

  {

  rstr=ConvertChinese(str)+"角";

  return

  rstr;

  }

  else

  {

  string tmpstr=str.Substring(0,1);

  rstr=ConvertChinese(tmpstr)+"角";

  tmpstr=str.Substring(1,1);

  rstr+=ConvertChinese(tmpstr)+"分";

  rstr=rstr.Replace("零分","");

  rstr=rstr.Replace("零角","");

  return rstr;

  }

  }

  ///

  /// 转换数字

  ///

  /// 转换的字符串(四位以内)

  ///

  public string ConvertDigit(string str)

  {

  int strlen=str.Length;

  string rstr="";

  switch (strlen)

  {

  case 1: rstr=ConvertChinese(str);break;

  case 2: rstr=Convert2Digit(str);break;

  case 3: rstr=Convert3Digit(str);break;

  case 4: rstr=Convert4Digit(str);break;

  }

  rstr=rstr.Replace("拾零","拾");

  strlen=rstr.Length;

  return rstr;

  }

  ///

  /// 转换四位数字

  ///

  public string Convert4Digit(string str)

  {

  string str1=str.Substring(0,1);

  string str2=str.Substring(1,1);

  string str3=str.Substring(2,1);

  string str4=str.Substring(3,1);

  string rstring="";

  rstring+=ConvertChinese(str1)+"仟";

  rstring+=ConvertChinese(str2)+"佰";

  rstring+=ConvertChinese(str3)+"拾";

  rstring+=ConvertChinese(str4);

  rstring=rstring.Replace("零仟","零");

  rstring=rstring.Replace("零佰","零");

  rstring=rstring.Replace("零拾","零");

  rstring=rstring.Replace("零零","零");

  rstring=rstring.Replace("零零","零");

  rstring=rstring.Replace("零零","零");

  return rstring;

  }

  ///

  /// 转换三位数字

  ///

  public string Convert3Digit(string str)

  {

  string str1=str.Substring(0,1);

  string str2=str.Substring(1,1);

  string str3=str.Substring(2,1);

  string rstring="";

  rstring+=ConvertChinese(str1)+"佰";

  rstring+=ConvertChinese(str2)+"拾";

  rstring+=ConvertChinese(str3);

  rstring=rstring.Replace("零佰","零");

  rstring=rstring.Replace("零拾","零");

  rstring=rstring.Replace("零零","零");

  rstring=rstring.Replace("零零","零");

  return rstring;

  }

  ///

  /// 转换二位数字

  ///

  public string Convert2Digit(string str)

  {

  string str1=str.Substring(0,1);

  string str2=str.Substring(1,1);

  string rstring="";

  rstring+=ConvertChinese(str1)+"拾";

  rstring+=ConvertChinese(str2);

  rstring=rstring.Replace("零拾","零");

  rstring=rstring.Replace("零零","零");

  return rstring;

  }

  ///

  /// 将一位数字转换成中文大写数字

  ///

  public string ConvertChinese(string str)

  {

  //"零壹贰叁肆伍陆柒捌玖拾佰仟孺?圆整角分"

  string cstr="";

  switch(str)

  {

  case "0": cstr="零";break;

  case "1": cstr="壹";break;

  case "2": cstr="贰";break;

  case "3": cstr="叁";break;

  case "4": cstr="肆";break;

  case "5": cstr="伍";break;

  case "6": cstr="陆";break;

  case "7": cstr="柒";break;

  case "8": cstr="捌";break;

  case "9": cstr="玖";break;

  }

  return(cstr);

  }

  本文来自:http://doc.linuxpk.com/38219.html

 
     最新更新
·精简你的windows2000
·获取系统的临时目录路径的函数源代码
·DataList和DataRepeater分页
·Plugin在C#中的一种实践源代码分析
·在气泡式提示窗口中显示关闭按钮和链接
·在HTM中引用VB6的OCX控件
·基类和子类的调用顺序(C#,java)
·如何随机选取n条记录或对记录作排序
·能否编译mdb文件到exe文件的方法
·从进程里得到比如说QQ.exe的句柄
·Whidbey初体验之局部类型-partial类型
·C++和C#中的结构和类之间的对比
·C#实现阿拉伯数字转换成中文大写金额代码
·XML中的经典常见问题完全展播
·修改大型XML文件的有效方法展示
·当C#结构成员是引用,会发生什么
·CLR调试接口的架构与应用之调试事件
·CLR调试接口的架构与应用之调试框架
·关于C#中switch语句的一点注意
·通过C#中的解构器编写可靠高效的应用程序
·C#对底层数据操作的通用类逐个剖析
·彻底探索计算机变慢10大原因
·高级Windows2000Rootkit检测技术
·虚拟主机探虚实
·“Windows优化大师”应用三忌
·20例WindowsXP操作系统优化技巧
·活学活用Windows2003“分区增容”功能
·露一小手:汉化WindowsXP/2003磁盘扫描
·WindowsXP实用实战技巧--分隔邮件
·操作系统启动时让进度条一闪而过