Discuz教程网

C#实现的【阿拉伯数字转换成中文大写金额】代码

[复制链接]
authicon dly 发表于 2011-3-11 10:14:14 | 显示全部楼层 |阅读模式
以下c#代码实现了将阿拉伯数字转换成中文大写金额的功能,并visual studio.net 2003 下调试基本通过(未经严格测试,希望各位发现错误后与作者联系fanz2000@sohu.com,或直接在csdn上回帖告知)。

代码的主调函数为convertsum,它的参数是string类型的数字字符串。在asp.net中调用方式如下:
label1.text=convertsum("数字字符串");

其代码如下:



  1. //作者:fanz2000
  2. //email:fanz2000@sohu.com
  3. ///
  4. /// 转换数字金额主函数(包括小数)
  5. ///
  6. /// 数字字符串
  7. /// 转换成中文大写后的字符串或者出错信息提示字符串
  8. public string convertsum(string str)
  9. {
  10. if(!ispositvedecimal(str))
  11. return "输入的不是正数字!";
  12. if(double.parse(str)>999999999999.99)
  13. return "数字太大,无法换算,请输入一万亿元以下的金额";
  14. char[] ch=new char[1];
  15. ch[0]=.; //小数点
  16. string[] splitstr=null; //定义按小数点分割后的字符串数组
  17. splitstr=str.split(ch[0]);//按小数点分割字符串
  18. if(splitstr.length==1) //只有整数部分
  19. return convertdata(str)+"圆整";
  20. else //有小数部分
  21. {
  22. string rstr;
  23. rstr=convertdata(splitstr[0])+"圆";//转换整数部分
  24. rstr+=convertxiaoshu(splitstr[1]);//转换小数部分
  25. return rstr;
  26. }

  27. }
  28. ///
  29. /// 判断是否是正数字字符串
  30. ///
  31. /// 判断字符串
  32. /// 如果是数字,返回true,否则返回false
  33. public bool ispositvedecimal(string str)
  34. {
  35. decimal d;
  36. try
  37. {
  38. d=decimal.parse(str);

  39. }
  40. catch(exception)
  41. {
  42. return false;
  43. }
  44. if(d>0)
  45. return true;
  46. else
  47. return false;
  48. }
  49. ///
  50. /// 转换数字(整数)
  51. ///
  52. /// 需要转换的整数数字字符串
  53. /// 转换成中文大写后的字符串
  54. public string convertdata(string str)
  55. {
  56. string tmpstr="";
  57. string rstr="";
  58. int strlen=str.length;
  59. if (strlen<=4)//数字长度小于四位
  60. {
  61. rstr= convertdigit(str);

  62. }
  63. else
  64. {

  65. if (strlen<=8)//数字长度大于四位,小于八位
  66. {
  67. tmpstr=str.substring(strlen-4,4);//先截取最后四位数字
  68. rstr=convertdigit(tmpstr);//转换最后四位数字
  69. tmpstr=str.substring(0,strlen-4);//截取其余数字
  70. //将两次转换的数字加上萬后相连接
  71. rstr= string.concat(convertdigit(tmpstr)+"萬",rstr);
  72. rstr=rstr.replace("零萬","萬");
  73. rstr=rstr.replace("零零","零");

  74. }
  75. else
  76. if(strlen<=12)//数字长度大于八位,小于十二位
  77. {
  78. tmpstr=str.substring(strlen-4,4);//先截取最后四位数字
  79. rstr=convertdigit(tmpstr);//转换最后四位数字
  80. tmpstr=str.substring(strlen-8,4);//再截取四位数字
  81. rstr= string.concat(convertdigit(tmpstr)+"萬",rstr);
  82. tmpstr=str.substring(0,strlen-8);
  83. rstr= string.concat(convertdigit(tmpstr)+"億",rstr);
  84. rstr=rstr.replace("零億","億");
  85. rstr=rstr.replace("零萬","零");
  86. rstr=rstr.replace("零零","零");
  87. rstr=rstr.replace("零零","零");
  88. }
  89. }
  90. strlen=rstr.length;
  91. if (strlen>=2)
  92. {
  93. switch(rstr.substring(strlen-2,2))
  94. {
  95. case "佰零":rstr=rstr.substring(0,strlen-2)+"佰"; break;
  96. case "仟零":rstr=rstr.substring(0,strlen-2)+"仟"; break;
  97. case "萬零":rstr=rstr.substring(0,strlen-2)+"萬";break;
  98. case "億零":rstr=rstr.substring(0,strlen-2)+"億";break;

  99. }
  100. }

  101. return rstr;
  102. }
  103. ///
  104. /// 转换数字(小数部分)
  105. ///
  106. /// 需要转换的小数部分数字字符串
  107. /// 转换成中文大写后的字符串
  108. public string convertxiaoshu(string str)
  109. {
  110. int strlen=str.length ;
  111. string rstr;
  112. if(strlen==1)
  113. {
  114. rstr=convertchinese(str)+"角";
  115. return rstr;
  116. }
  117. else
  118. {
  119. string tmpstr=str.substring(0,1);
  120. rstr=convertchinese(tmpstr)+"角";
  121. tmpstr=str.substring(1,1);
  122. rstr+=convertchinese(tmpstr)+"分";
  123. rstr=rstr.replace("零分","");
  124. rstr=rstr.replace("零角","");
  125. return rstr;
  126. }


  127. }

  128. ///
  129. /// 转换数字
  130. ///
  131. /// 转换的字符串(四位以内)
  132. ///
  133. public string convertdigit(string str)
  134. {
  135. int strlen=str.length;
  136. string rstr="";
  137. switch (strlen)
  138. {
  139. case 1: rstr=convertchinese(str);break;
  140. case 2: rstr=convert2digit(str);break;
  141. case 3: rstr=convert3digit(str);break;
  142. case 4: rstr=convert4digit(str);break;
  143. }
  144. rstr=rstr.replace("拾零","拾");
  145. strlen=rstr.length;

  146. return rstr;
  147. }


  148. ///
  149. /// 转换四位数字
  150. ///
  151. public string convert4digit(string str)
  152. {
  153. string str1=str.substring(0,1);
  154. string str2=str.substring(1,1);
  155. string str3=str.substring(2,1);
  156. string str4=str.substring(3,1);
  157. string rstring="";
  158. rstring+=convertchinese(str1)+"仟";
  159. rstring+=convertchinese(str2)+"佰";
  160. rstring+=convertchinese(str3)+"拾";
  161. rstring+=convertchinese(str4);
  162. rstring=rstring.replace("零仟","零");
  163. rstring=rstring.replace("零佰","零");
  164. rstring=rstring.replace("零拾","零");
  165. rstring=rstring.replace("零零","零");
  166. rstring=rstring.replace("零零","零");
  167. rstring=rstring.replace("零零","零");
  168. return rstring;
  169. }
  170. ///
  171. /// 转换三位数字
  172. ///
  173. public string convert3digit(string str)
  174. {
  175. string str1=str.substring(0,1);
  176. string str2=str.substring(1,1);
  177. string str3=str.substring(2,1);
  178. string rstring="";
  179. rstring+=convertchinese(str1)+"佰";
  180. rstring+=convertchinese(str2)+"拾";
  181. rstring+=convertchinese(str3);
  182. rstring=rstring.replace("零佰","零");
  183. rstring=rstring.replace("零拾","零");
  184. rstring=rstring.replace("零零","零");
  185. rstring=rstring.replace("零零","零");
  186. return rstring;
  187. }
  188. ///
  189. /// 转换二位数字
  190. ///
  191. public string convert2digit(string str)
  192. {
  193. string str1=str.substring(0,1);
  194. string str2=str.substring(1,1);
  195. string rstring="";
  196. rstring+=convertchinese(str1)+"拾";
  197. rstring+=convertchinese(str2);
  198. rstring=rstring.replace("零拾","零");
  199. rstring=rstring.replace("零零","零");
  200. return rstring;
  201. }
  202. ///
  203. /// 将一位数字转换成中文大写数字
  204. ///
  205. public string convertchinese(string str)
  206. {
  207. //"零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分"
  208. string cstr="";
  209. switch(str)
  210. {
  211. case "0": cstr="零";break;
  212. case "1": cstr="壹";break;
  213. case "2": cstr="贰";break;
  214. case "3": cstr="叁";break;
  215. case "4": cstr="肆";break;
  216. case "5": cstr="伍";break;
  217. case "6": cstr="陆";break;
  218. case "7": cstr="柒";break;
  219. case "8": cstr="捌";break;
  220. case "9": cstr="玖";break;
  221. }
  222. return(cstr);
  223. }
复制代码








上一篇:Discuz X2 插件开发手册(在线阅读)
下一篇:C#实现中文数字转阿拉伯数字
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 01:28

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表