A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马谦 中级黑马   /  2013-10-15 13:59  /  1410 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;

  4. namespace SuperCode.Common
  5. {
  6.     /// <summary>
  7.     /// Rmb 的摘要说明。
  8.     /// </summary>
  9.     public class Rmb
  10.     {
  11.         /// <summary>
  12.         /// 转换人民币大小金额
  13.         /// </summary>
  14.         /// <param name="num">金额</param>
  15.         /// <returns>返回大写形式</returns>
  16.         public string CmycurD(decimal num)
  17.         {
  18.             string str1 = "零壹贰叁肆伍陆柒捌玖";            //0-9所对应的汉字
  19.             string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
  20.             string str3 = "";    //从原num值中取出的值
  21.             string str4 = "";    //数字的字符串形式
  22.             string str5 = "";  //人民币大写金额形式
  23.             int i;    //循环变量
  24.             int j;    //num的值乘以100的字符串长度
  25.             string ch1 = "";    //数字的汉语读法
  26.             string ch2 = "";    //数字位的汉字读法
  27.             int nzero = 0;  //用来计算连续的零值是几个
  28.             int temp;            //从原num值中取出的值

  29.             num = Math.Round(Math.Abs(num), 2);    //将num取绝对值并四舍五入取2位小数
  30.             str4 = ((long)(num * 100)).ToString();        //将num乘100并转换成字符串形式
  31.             j = str4.Length;      //找出最高位
  32.             if (j > 15) { return "溢出"; }
  33.             str2 = str2.Substring(15 - j);   //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分

  34.             //循环取出每一位需要转换的值
  35.             for (i = 0; i < j; i++)
  36.             {
  37.                 str3 = str4.Substring(i, 1);          //取出需转换的某一位的值
  38.                 temp = Convert.ToInt32(str3);      //转换为数字
  39.                 if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
  40.                 {
  41.                     //当所取位数不为元、万、亿、万亿上的数字时
  42.                     if (str3 == "0")
  43.                     {
  44.                         ch1 = "";
  45.                         ch2 = "";
  46.                         nzero = nzero + 1;
  47.                     }
  48.                     else
  49.                     {
  50.                         if (str3 != "0" && nzero != 0)
  51.                         {
  52.                             ch1 = "零" + str1.Substring(temp * 1, 1);
  53.                             ch2 = str2.Substring(i, 1);
  54.                             nzero = 0;
  55.                         }
  56.                         else
  57.                         {
  58.                             ch1 = str1.Substring(temp * 1, 1);
  59.                             ch2 = str2.Substring(i, 1);
  60.                             nzero = 0;
  61.                         }
  62.                     }
  63.                 }
  64.                 else
  65.                 {
  66.                     //该位是万亿,亿,万,元位等关键位
  67.                     if (str3 != "0" && nzero != 0)
  68.                     {
  69.                         ch1 = "零" + str1.Substring(temp * 1, 1);
  70.                         ch2 = str2.Substring(i, 1);
  71.                         nzero = 0;
  72.                     }
  73.                     else
  74.                     {
  75.                         if (str3 != "0" && nzero == 0)
  76.                         {
  77.                             ch1 = str1.Substring(temp * 1, 1);
  78.                             ch2 = str2.Substring(i, 1);
  79.                             nzero = 0;
  80.                         }
  81.                         else
  82.                         {
  83.                             if (str3 == "0" && nzero >= 3)
  84.                             {
  85.                                 ch1 = "";
  86.                                 ch2 = "";
  87.                                 nzero = nzero + 1;
  88.                             }
  89.                             else
  90.                             {
  91.                                 if (j >= 11)
  92.                                 {
  93.                                     ch1 = "";
  94.                                     nzero = nzero + 1;
  95.                                 }
  96.                                 else
  97.                                 {
  98.                                     ch1 = "";
  99.                                     ch2 = str2.Substring(i, 1);
  100.                                     nzero = nzero + 1;
  101.                                 }
  102.                             }
  103.                         }
  104.                     }
  105.                 }
  106.                 if (i == (j - 11) || i == (j - 3))
  107.                 {
  108.                     //如果该位是亿位或元位,则必须写上
  109.                     ch2 = str2.Substring(i, 1);
  110.                 }
  111.                 str5 = str5 + ch1 + ch2;

  112.                 if (i == j - 1 && str3 == "0")
  113.                 {
  114.                     //最后一位(分)为0时,加上“整”
  115.                     str5 = str5 + '整';
  116.                 }
  117.             }
  118.             if (num == 0)
  119.             {
  120.                 str5 = "零元整";
  121.             }
  122.             return str5;
  123.         }

  124.         /**/
  125.         /// <summary>
  126.         /// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num)
  127.         /// </summary>
  128.         /// <param name="num">用户输入的金额,字符串形式未转成decimal</param>
  129.         /// <returns></returns>
  130.         public string CmycurD(string numstr)
  131.         {
  132.             try
  133.             {
  134.                 decimal num = Convert.ToDecimal(numstr);
  135.                 return CmycurD(num);
  136.             }
  137.             catch
  138.             {
  139.                 return "非数字形式!";
  140.             }
  141.         }
  142.     }

  143. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马