货币金额大写转换库源码 Money2String.dll

这是很早以前的了,曾被VC知识库论坛收为精华贴(http://www.vckbase.com/bbs/prime/viewprime.asp?id=576)。也曾被许多论坛转载。今收于此,以作纪念。

 

  1. // 货币金额大写转换库   Money2String.dll
  2. // 静态中文转换方法     String GetCnString(String MoneyString)
  3. // 最大转化金额         9999999999999999.99  (16位整数位,2位小数位)
  4. // 方法返回值           转换成功则返回非零长字串,否则返回零长字串
  5. // 静态英文转换方法     String GetEnString(String MoneyString)
  6. // 最大转化金额         999999999999999.99   (15位整数位,2位小数位)
  7. // 方法返回值           转换成功则返回非零长字串,否则返回零长字串
  8. // 程序设计 xlFancy     版本 2003.03.18.22 - 2003.04.09
  9. // 邮箱地址 xlfancy@21cn.com
  10. using System;
  11. namespace Money2String
  12. {
  13.     public class Money2String
  14.     {
  15.         private string   cnNumber      = "零壹贰叁肆伍陆柒捌玖";
  16.         private string   cnUnit        = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";
  17.         private string[] enSmallNumber = {"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN"};
  18.         private string[] enLargeNumber = {"TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"};
  19.         private string[] enUnit        = {"","THOUSAND","MILLION","BILLION","TRILLION"};
  20.         // 以下是货币金额中文大写转换方法
  21.         public string GetCnString(string MoneyString)
  22.         {
  23.             string [] tmpString  = MoneyString.Split('.');
  24.             string    intString  = MoneyString;   // 默认为整数
  25.             string    decString  = "";            // 保存小数部分字串
  26.             string    rmbCapital = "";            // 保存中文大写字串
  27.             int       k;
  28.             int       j;
  29.             int       n;
  30.             if (tmpString.Length>1)
  31.             {
  32.                 intString = tmpString[0];             // 取整数部分
  33.                 decString = tmpString[1];             // 取小数部分
  34.             }
  35.             decString += "00";
  36.             decString  = decString.Substring (0,2);   // 保留两位小数位
  37.             intString += decString;
  38.             try
  39.             {
  40.                 k = intString.Length -1;
  41.                 if (k>0 && k<18)
  42.                 {
  43.                     for (int i=0;i<=k;i++)
  44.                     {
  45.                         j=(int)intString[i]-48;
  46.                         n = i+1 >= k ? (int)intString[k]-48:(int)intString[i+1]-48;
  47.                         if (j==0)
  48.                         {
  49.                             if((k-i) % 4==2)
  50.                             {
  51.                                 rmbCapital += cnUnit[k-i];
  52.                             }
  53.                             else
  54.                             {
  55.                                 if (n != 0)
  56.                                 {
  57.                                     rmbCapital  += cnNumber[j];
  58.                                 }
  59.                             }
  60.                         }
  61.                         else
  62.                         {
  63.                             rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k-i];
  64.                         }
  65.                     }
  66.                     rmbCapital = rmbCapital.Replace ("兆亿万","兆");
  67.                     rmbCapital = rmbCapital.Replace ("兆亿","兆");
  68.                     rmbCapital = rmbCapital.Replace ("亿万","亿");
  69.                     rmbCapital = rmbCapital.TrimStart('元');
  70.                     rmbCapital = rmbCapital.TrimStart('零');
  71.                     return rmbCapital; 
  72.                 }
  73.                 else
  74.                 {
  75.                     return MoneyString;   // 超出转换范围时,返回原值
  76.                 }
  77.             }
  78.             catch
  79.             {
  80.                 return "";   // 含有非数值字符时,返回零长字串
  81.             }
  82.         }
  83.         // 以下是货币金额英文大写转换方法
  84.         public string GetEnString(string MoneyString)
  85.         {
  86.             string [] tmpString  = MoneyString.Split('.');
  87.             string    intString  = MoneyString;   // 默认为整数
  88.             string    decString  = "";            // 保存小数部分字串
  89.             string    engCapital = "";            // 保存英文大写字串
  90.             string    strBuff1;
  91.             string    strBuff2;
  92.             string    strBuff3;
  93.             int       curPoint;
  94.             int       i1;
  95.             int       i2;
  96.             int       i3;
  97.             int       k;
  98.             int       n;
  99.     
  100.             if (tmpString.Length >1)
  101.             {
  102.                 intString = tmpString[0];             // 取整数部分
  103.                 decString = tmpString[1];             // 取小数部分
  104.             }
  105.             decString += "00";
  106.             decString  = decString.Substring (0,2);   // 保留两位小数位
  107.     
  108.             try
  109.             {
  110.                 // 以下处理整数部分
  111.                 curPoint = intString.Length-1;
  112.                 if (curPoint>=0 && curPoint<15)
  113.                 {
  114.                     k = 0;
  115.                     while(curPoint>=0)
  116.                     {
  117.                         strBuff1 = "";
  118.                         strBuff2 = "";
  119.                         strBuff3 = "";
  120.                         if (curPoint>=2)
  121.                         {
  122.                             n=int.Parse(intString.Substring(curPoint-2,3));
  123.                             if (n !=0)
  124.                             {
  125.                                 i1 = n/100;            // 取佰位数值
  126.                                 i2 = (n-i1*100)/10;    // 取拾位数值
  127.                                 i3 = n-i1*100-i2*10;   // 取个位数值
  128.                                 if (i1 !=0)
  129.                                 {
  130.                                     strBuff1 = enSmallNumber[i1] + " HUNDRED ";
  131.                                 }
  132.                                 if (i2!=0)
  133.                                 {
  134.                                     if (i2==1)
  135.                                     {
  136.                                         strBuff2 = enSmallNumber[i2*10+i3] + " ";
  137.                                     }
  138.                                     else 
  139.                                     {
  140.                                         strBuff2 = enLargeNumber[i2-2] + " ";
  141.                                         if (i3 !=0)
  142.                                         {
  143.                                             strBuff3 = enSmallNumber[i3] + " ";
  144.                                         }
  145.                                     }
  146.                                 }
  147.                                 else
  148.                                 {
  149.                                     if (i3 !=0)
  150.                                     {
  151.                                         strBuff3 = enSmallNumber[i3] + " ";
  152.                                     }
  153.                                 }
  154.                                 engCapital = strBuff1 + strBuff2 + strBuff3 + enUnit[k] + " " + engCapital; 
  155.                             }
  156.                         }
  157.                         else
  158.                         {
  159.                             n = int.Parse(intString.Substring(0,curPoint+1));
  160.                             if (n !=0)
  161.                             {
  162.                                 i2 = n/10;      // 取拾位数值
  163.                                 i3 = n-i2*10;   // 取个位数值
  164.                                 if (i2!=0)
  165.                                 {
  166.                                     if (i2==1)
  167.                                     {
  168.                                         strBuff2 = enSmallNumber[i2*10+i3] + " ";
  169.                                     }
  170.                                     else 
  171.                                     {
  172.                                         strBuff2 = enLargeNumber[i2-2] + " ";
  173.                                         if (i3 !=0)
  174.                                         {
  175.                                             strBuff3 = enSmallNumber[i3] + " ";
  176.                                         }
  177.                                     }
  178.                                 }
  179.                                 else
  180.                                 {
  181.                                     if (i3 !=0)
  182.                                     {
  183.                                         strBuff3 = enSmallNumber[i3] + " ";
  184.                                     }
  185.                                 }
  186.                                 engCapital = strBuff2 + strBuff3 + enUnit[k] + " " + engCapital;
  187.                             }
  188.                         }
  189.             
  190.                         ++k;
  191.                         curPoint -= 3;
  192.                     }
  193.                     engCapital = engCapital.TrimEnd();
  194.                 
  195.     
  196.                     // 以下处理小数部分
  197.                     strBuff2 = "";
  198.                     strBuff3 = "";
  199.                     n = int.Parse(decString);
  200.                     if (n !=0)
  201.                     {
  202.                         i2 = n/10;      // 取拾位数值
  203.                         i3 = n-i2*10;   // 取个位数值
  204.                         if (i2!=0)
  205.                         {
  206.                             if (i2==1)
  207.                             {
  208.                                 strBuff2 = enSmallNumber[i2*10+i3] + " ";
  209.                             }
  210.                             else 
  211.                             {
  212.                                 strBuff2 = enLargeNumber[i2-2] + " ";
  213.                                 if (i3 !=0)
  214.                                 {
  215.                                     strBuff3 = enSmallNumber[i3] + " ";
  216.                                 }
  217.                             }
  218.                         }
  219.                         else
  220.                         {
  221.                             if (i3 !=0)
  222.                             {
  223.                                 strBuff3 = enSmallNumber[i3] + " ";
  224.                             }
  225.                         }
  226.                         // 将小数字串追加到整数字串后
  227.                         if (engCapital.Length>0)
  228.                         {
  229.                             engCapital = engCapital + " AND CENTS " + strBuff2+strBuff3;   // 有整数部分时
  230.                         }
  231.                         else
  232.                         {
  233.                             engCapital = "CENTS " + strBuff2 + strBuff3;   // 只有小数部分时
  234.                         }
  235.                     }   
  236.                     engCapital = engCapital.TrimEnd();
  237.                     return engCapital;
  238.                 }
  239.                 else
  240.                 {
  241.                     return MoneyString;   // 超出转换范围时,返回原值
  242.                 }
  243.             }
  244.             catch
  245.             {
  246.                 return "";   // 含非数字字符时,返回零长字串
  247.             }
  248.         }
  249.     }
  250. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值