资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

人民币大写函数修正!

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

下面这个函数,其它的转换都是正确的,就是十万级别的数字,不对。比如30万元,会变成30元,就是少了个“万”字,希望高手指点一下。  
   
   
  public   static   string   Chinese(string   num)  
  {  
  string[]   arr1={"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","元","点","角","分"};  
  string[]   arr3={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};  
  int   point=num.IndexOf(.);  
  if(point<0)point=num.Length;  
  int   len=arr1.Length-point-3;  
  string   strRet="";  
  bool   flag=true;  
   
  for(int   i=0;i<num.Length;i++)  
  {  
  if(i!=point)  
  {  
  string   val=arr1[i+len];  
  if(num[i]!=0)  
  {  
  strRet+=arr3[int.Parse(num[i].ToString())]+val;flag=true;  
  }  
  else  
   
  if(val=="亿"||val=="万"||val=="元"||val=="分")  
  {  
  if(!flag)  
  {  
  strRet=strRet.Substring(0,strRet.Length-1)+val;  
  flag=true;  
  }  
  }  
  else  
  {  
  if(flag)  
  {  
  flag=false;  
  strRet+="零";  
  }  
  }  
  }  
   
  }  
  return   strRet.Replace("零零零","").Replace("零零","零");  
  }

网友回答:

发表者:wangxt

这里有一个  
  http://community.csdn.net/Expert/topic/3278/3278898.xml?temp=.97633

发表者:sjzwinfor

public   static   string   Chinese(string   num)  
  {  
  string[]   arr1={"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","元","点","角","分"};  
  string[]   arr3={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};  
  int   point=num.IndexOf(.);  
  if(point<0)point=num.Length;  
  int   len=arr1.Length-point-3;  
  string   strRet="";  
  bool   flag=true;  
   
  for(int   i=0;i<num.Length;i++)  
  {  
  if(i!=point)  
  {  
  string   val=arr1[i+len];  
  if(num[i]!=0)  
  {  
  strRet+=arr3[int.Parse(num[i].ToString())]+val;flag=true;  
  }  
  else  
  {  
   
  if(val=="亿"||val=="万"||val=="元"||val=="分")  
  {  
  // if(!flag)  
  if(flag)  
   
  {  
  // strRet=strRet.Substring(0,strRet.Length-1)+val;  
  // flag=true;  
  strRet+=val;  
  flag=false;  
  }  
  }  
  else  
  {  
  // if(flag)  
  // {  
  // flag=false;  
  strRet+="零";  
  flag=true;  
  // }  
  }  
  }  
  }  
   
  }  
  return   strRet.Replace("零零亿","亿").Replace("零亿","亿").Replace("零零零万","万").Replace("零零万","万").Replace("零万","万").Replace("零零零元","元").Replace("零零元","元").Replace("零元","元").Replace("亿万","亿").Replace("零零零","零").Replace("零零","零");  
  // return   strRet;  
  }

发表者:cancersyf

<!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.0   Transitional//EN">  
  <html>  
    <head>  
      <title></title>  
      <script   language="jscript">  
  function   convertCurrency(currencyDigits)   {  
  //   Constants:  
    var   MAXIMUM_NUMBER   =   99999999999.99;  
    //   Predefine   the   radix   characters   and   currency   symbols   for   output:  
    var   CN_ZERO   =   "零";  
    var   CN_ONE   =   "壹";  
    var   CN_TWO   =   "贰";  
    var   CN_THREE   =   "叁";  
    var   CN_FOUR   =   "肆";  
    var   CN_FIVE   =   "伍";  
    var   CN_SIX   =   "陆";  
    var   CN_SEVEN   =   "柒";  
    var   CN_EIGHT   =   "捌";  
    var   CN_NINE   =   "玖";  
    var   CN_TEN   =   "拾";  
    var   CN_HUNDRED   =   "佰";  
    var   CN_THOUSAND   =   "仟";  
    var   CN_TEN_THOUSAND   =   "万";  
    var   CN_HUNDRED_MILLION   =   "亿";  
    var   CN_SYMBOL   =   "人民币";  
    var   CN_DOLLAR   =   "元";  
    var   CN_TEN_CENT   =   "角";  
    var   CN_CENT   =   "分";  
    var   CN_INTEGER   =   "整";  
     
  //   Variables:  
    var   integral;   //   Represent   integral   part   of   digit   number.  
    var   decimal;   //   Represent   decimal   part   of   digit   number.  
    var   outputCharacters;   //   The   output   result.  
    var   parts;  
    var   digits,   radices,   bigRadices,   decimals;  
    var   zeroCount;  
    var   i,   p,   d;  
    var   quotient,   modulus;  
     
  //   Validate   input   string:  
    currencyDigits   =   currencyDigits.toString();  
    if   (currencyDigits   ==   "")   {  
      alert("Empty   input!");  
      return   "";  
    }  
    if   (currencyDigits.match(/[^,.\d]/)   !=   null)   {  
      alert("Invalid   characters   in   the   input   string!");  
      return   "";  
    }  
    if   ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/)   ==   null)   {  
      alert("Illegal   format   of   digit   number!");  
      return   "";  
    }  
     
  //   Normalize   the   format   of   input   digits:  
    currencyDigits   =   currencyDigits.replace(/,/g,   "");   //   Remove   comma   delimiters.  
    currencyDigits   =   currencyDigits.replace(/^0+/,   "");   //   Trim   zeros   at   the   beginning.  
    //   Assert   the   number   is   not   greater   than   the   maximum   number.  
    if   (Number(currencyDigits)   >   MAXIMUM_NUMBER)   {  
      alert("Too   large   a   number   to   convert!");  
      return   "";  
    }  
     
  //   Process   the   coversion   from   currency   digits   to   characters:  
    //   Separate   integral   and   decimal   parts   before   processing   coversion:  
    parts   =   currencyDigits.split(".");  
    if   (parts.length   >   1)   {  
      integral   =   parts[0];  
      decimal   =   parts[1];  
      //   Cut   down   redundant   decimal   digits   that   are   after   the   second.  
      decimal   =   decimal.substr(0,   2);  
    }  
    else   {  
      integral   =   parts[0];  
      decimal   =   "";  
    }  
    //   Prepare   the   characters   corresponding   to   the   digits:  
    digits   =   new   Array(CN_ZERO,   CN_ONE,   CN_TWO,   CN_THREE,   CN_FOUR,   CN_FIVE,   CN_SIX,   CN_SEVEN,   CN_EIGHT,   CN_NINE);  
    radices   =   new   Array("",   CN_TEN,   CN_HUNDRED,   CN_THOUSAND);  
    bigRadices   =   new   Array("",   CN_TEN_THOUSAND,   CN_HUNDRED_MILLION);  
    decimals   =   new   Array(CN_TEN_CENT,   CN_CENT);  
    //   Start   processing:  
    outputCharacters   =   "";  
    //   Process   integral   part   if   it   is   larger   than   0:  
    if   (Number(integral)   >   0)   {  
      zeroCount   =   0;  
      for   (i   =   0;   i   <   integral.length;   i++)   {  
        p   =   integral.length   -   i   -   1;  
        d   =   integral.substr(i,   1);  
        quotient   =   p   /   4;  
        modulus   =   p   %   4;  
        if   (d   ==   "0")   {  
          zeroCount++;  
        }  
        else   {  
          if   (zeroCount   >   0)  
          {  
            outputCharacters   +=   digits[0];  
          }  
          zeroCount   =   0;  
          outputCharacters   +=   digits[Number(d)]   +   radices[modulus];  
        }  
        if   (modulus   ==   0   &&   zeroCount   <   4)   {  
          outputCharacters   +=   bigRadices[quotient];  
        }  
      }  
      outputCharacters   +=   CN_DOLLAR;  
    }  
    //   Process   decimal   part   if   there   is:  
    if   (decimal   !=   "")   {  
      for   (i   =   0;   i   <   decimal.length;   i++)   {  
        d   =   decimal.substr(i,   1);  
        if   (d   !=   "0")   {  
          outputCharacters   +=   digits[Number(d)]   +   decimals[i];  
        }  
      }  
    }  
    //   Confirm   and   return   the   final   output   string:  
    if   (outputCharacters   ==   "")   {  
      outputCharacters   =   CN_ZERO   +   CN_DOLLAR;  
    }  
    if   (decimal   ==   "")   {  
      outputCharacters   +=   CN_INTEGER;  
    }  
    outputCharacters   =   CN_SYMBOL   +   outputCharacters;  
    return   outputCharacters;  
  }  
      </script>  
    </head>  
    <body>  
      <INPUT   id="Digits"   type="text"   name="Digits"   size=20>  
      <INPUT   id="Convert"   type="button"   value="Convert"   name="Convert"   onclick="Result.value   =   convertCurrency(Digits.value);">  
      <INPUT   id="Result"   type="text"   name="Result"   size=60>  
    </body>  
  </html>

发表者:cancersyf

说明:  
  1、对一给定字符串,如:1234.55,转换成正确的中文货币描述:如:人民币壹仟贰佰叁拾四元五角五分  
   
  2、输入的字符串形式可以是以下几种:带分隔符的,如:123,456,789.00;不带分隔符的,如:123456789  
   
  3、输出的中文货币描述要符合规范,如:0.3----人民币三角;0.33----人民币三角三分;1----人民币壹元整  
        100----人民币壹佰元整;1001----人民币壹仟零壹元整;10000001----人民币壹仟万零壹元整;  
        1001001----人民币壹仟零壹万零壹元整,等  
   
  4、最大转换能到百亿  
 

发表者:adminyao

study!

发表者:xjtandqt

 
  将数值转换成大写  
  Public   Function   ToChineseNumber(lsNum   As   Variant,   Optional   isSign   As   Boolean   =   False)   As   String  
  Dim   lsNum1   As   String  
  Dim   lsString   As   String  
  Dim   LsString1   As   String  
  Dim   i   As   Integer  
  Dim   j   As   Integer  
  Dim   lChar   As   String  
   
  lsString   =   "分角元拾佰仟万拾佰仟亿拾佰仟万兆拾佰仟万"  
  LsString1   =   "零壹贰叁肆伍陆染捌玖"  
   
  If   Round(Cdbl(""   &   lsNum),   2)   >   10   ^   14   Then  
        MsgBox   "数值太大,已超出范围!",   vbOKOnly   +   vbExclamation  
        Exit   Function  
  End   If  
   
  lsNum1   =   Replace(Format(Round(Cdbl(""   &   lsNum),   2),   "#####.00"),   ".",   "")  
   
  ToChineseNumber   =   ""  
  j   =   0  
  For   i   =   Len(lsNum1)   To   1   Step   -1  
          j   =   j   +   1  
          lChar   =   Mid(lsNum1,   i,   1)  
          ToChineseNumber   =   Mid(LsString1,   Val(lChar)   +   1,   1)   &   Mid(lsString,   j,   1)   &   ToChineseNumber  
  Next   i  
   
  ToChineseNumber   =   IIf(isSign,   "$",   "")   &   ToChineseNumber  
  End   Function  
   
  这个是我同事写的一个数字转文字的人民币转换函数,用vb写的,大家稍作修改就变成c#的了。  
  转换范围为,值不超出10^14都可以。!  
  比如:  
  ToChineseNumber(123456789.1234)  
  壹亿贰仟叁佰肆拾伍万陆仟染佰捌拾玖元壹角贰分  
   
  ToChineseNumber(123456789.1234,true)  
  $壹亿贰仟叁佰肆拾伍万陆仟染佰捌拾玖元壹角贰分  
   
  如果把函数中的"$"改为"人民币"   那么  
   
  ToChineseNumber(123456789.1234,true)  
  人民币壹亿贰仟叁佰肆拾伍万陆仟染佰捌拾玖元壹角贰分  
   
 

发表者:xjtandqt

其中   Round(Cdbl(""   &   lsNum),   2)    
  cdbl(""   &   lsum)把   lsum转换成双精度的数  
  Round函数:对cdbl(""   &   lsum)的结果保留两位小数。这两个函数都是vb自身的。  
 


 

 
热门推荐笔记本: 联想笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved