CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

誰能将下列:货币数字英文大写转换函数 从PHP转成JS?

楼主CXZ9(小笨笨)2003-01-07 10:03:17 在 Web 开发 / JavaScript 提问

货币数字英文大写转换函数  
  曙光   日期:2002-11-21   14:23:50    
     
   
     
  #使用方法  
  <?php  
  $num=1220.21;  
  echo   fmoney($num);//结果:1,220.21  
  echo   umoney($num);  
  //结果:ONE   THOUSAND   AND   TWO   HUNDRED   TWENTY   DOLLARS   AND   TWENTY-ONE   CENTS   ONLY    
  echo   umoney($num,"rmb");  
  //结果:ONE   THOUSAND   AND   TWO   HUNDRED   TWENTY   YUAN   AND   TWENTY-ONE   FEN   ONLY  
  ?>  
   
  <?php  
  //define  
  $numTable[0]="ZERO   ";  
  $numTable[1]="ONE   ";  
  $numTable[2]="TWO   ";  
  $numTable[3]="THREE   ";  
  $numTable[4]="FOUR   ";  
  $numTable[5]="FIVE   ";  
  $numTable[6]="SIX   ";  
  $numTable[7]="SEVEN   ";  
  $numTable[8]="EIGHT   ";  
  $numTable[9]="NINE   ";  
  $numTable[10]="TEN   ";  
  $numTable[11]="ELEVEN   ";  
  $numTable[12]="TWELVE   ";  
  $numTable[13]="THIRTEEN   ";  
  $numTable[14]="FOURTEEN   ";  
  $numTable[15]="FIFTEEN   ";  
  $numTable[16]="SIXTEEN   ";  
  $numTable[17]="SEVENTEEN   ";  
  $numTable[18]="EIGHTEEN   ";  
  $numTable[19]="NINETEEN   ";  
  $numTable[20]="TWENTY   ";  
  $numTable[30]="THIRTY   ";                                                
  $numTable[40]="FORTY   ";  
  $numTable[50]="FIFTY   ";  
  $numTable[60]="SIXTY   ";  
  $numTable[70]="SEVENTY   ";  
  $numTable[80]="EIGHTY   ";  
  $numTable[90]="NINETY   ";  
   
  $commaTable[0]="HUNDRED   ";  
  $commaTable[1]="THOUSAND   ";  
  $commaTable[2]="MILLION   ";  
  $commaTable[3]="MILLIARD   ";  
  $commaTable[4]="BILLION   ";  
  $commaTable[5]="?????   ";  
   
  //单位  
  $moneyType["usd"]="DOLLARS   ";  
  $moneyType["usd_1"]="CENTS   ONLY";  
  $moneyType["rmb"]="YUAN   ";  
  $moneyType["rmb_1"]="FEN   ONLY";  
   
  //格式化货币  
  function   fmoney($num)   {  
          $num=0+$num;  
          $num   =   sprintf("%.02f",$num);  
          if(strlen($num)   <=   6)   return   $num;  
          //从最后开始算起,每3个数它加一个","  
          for($i=strlen($num)-1,$k=1,   $j=100;   $i   >=   0;   $i--,$k++)   {  
                  $one_num   =   substr($num,$i,1);  
                  if($one_num   ==".")   {  
                          $numArray[$j--]   =   $one_num;  
                          $k=0;                          
                          continue;  
                  }  
   
                  if($k%3==0   and   $i!=0)   {                          
                          //如果正好只剩下3个数字,则不加','  
                          $numArray[$j--]   =   $one_num;  
                          $numArray[$j--]   =   ",";  
                          $k=0;  
                  }   else   {  
                          $numArray[$j--]=$one_num;  
                  }  
          }          
          ksort($numArray);  
          return   join("",$numArray);  
  }  
   
   
   
   
  function   umoney($num,$type="usd")   {  
          global   $numTable,$commaTable,$moneyType;  
          if($type=="")   $type="usd";  
          $fnum   =   fmoney($num);  
          $numArray   =   explode(",",$fnum);          
          $resultArray   =   array();  
          $k=0;  
          $cc=count($numArray);  
          for($i   =   0;   $i   <   count($numArray);   $i++)   {  
                  $num_str   =   $numArray[$i];  
                  //echo   "<br>";  
                  //小数位的处理400.21  
                  if(eregi("\.",$num_str))   {  
                          $dotArray   =   explode(".",$num_str);  
                          if($dotArray[1]   !=   0)   {  
                                  $resultArray[$k++]=format3num($dotArray[0]+0);                          
                                  $resultArray[$k++]=$moneyType[strtolower($type)];  
                                  $resultArray[$k++]="AND   ";  
                                  $resultArray[$k++]=format3num($dotArray[1]+0);  
                                  $resultArray[$k++]=$moneyType[strtolower($type)."_1"];  
                          }   else   {  
                                  $resultArray[$k++]=format3num($dotArray[0]+0);  
                                  $resultArray[$k++]=$moneyType[strtolower($type)];  
                          }  
                  }   else   {                  
                          //非小数位的处理  
                          if(($num_str+0)!=0)   {  
                                  $resultArray[$k++]=format3num($num_str+0);  
                                  $resultArray[$k++]=$commaTable[--$cc];  
                                        //判断:除小数外其余若不为零则加and  
                                        for($j=$i;   $j   <=   $cc;   $j++)   {  
                                                //echo   "<br>";  
                                                //echo   $numArray[$j];  
                                                if($numArray[$j]   !=0)   {  
                                                        $resultArray[$k++]="AND   ";                  
                                                        break;  
                                                }                                          
                                  }  
                          }  
                  }  
          }  
          return   join("",$resultArray);  
  }  
   
   
   
  function   format3num($num)   {  
          global   $numTable,$commaTable;  
          $numlen   =   strlen($num);  
          for($i   =   0,$j   =   0;$i   <   $numlen;   $i++)   {  
                  $bitenum[$j++]   =   substr($num,$i,1);  
          }  
          if($num==0)   return   "";  
          if($numlen   ==   1)   return   $numTable[$num];  
          if($numlen   ==   2)   {  
                  if($num   <=   20)   return   $numTable[$num];  
                  //第一位不可能零  
                  if($bitenum[1]==0)   {  
                          return   $numTable[$num];  
                  }   else   {  
                          return   trim($numTable[$bitenum[0]*10])."-".$numTable[$bitenum[1]];  
                  }  
           
          }  
          //第一个不可能为零  
          if($numlen   ==   3)   {  
                  if($bitenum[1]==0   &&   $bitenum[2]==0)   {  
                          //100  
                          return   $numTable[$bitenum[0]].$commaTable[0];  
                  }   elseif($bitenum[1]==0)   {  
                          //102  
                          return   $numTable[$bitenum[0]].$commaTable[0].$numTable[$bitenum[2]];  
                  }   elseif   ($bitenum[2]==0)   {  
                          //120  
                          return   $numTable[$bitenum[0]].$commaTable[0].$numTable[$bitenum[1]*10];  
                  }   else   {  
                          //123  
                          return   $numTable[$bitenum[0]].$commaTable[0].trim($numTable[$bitenum[1]*10])."-".$numTable[$bitenum[2]];  
                  }  
          }  
           
          return   $num;  
  }  
  ?>    
  问题点数:100、回复次数:3Top

1 楼CXZ9(小笨笨)回复于 2003-01-07 10:46:02 得分 0

要不把这个Delphi的转成JS的  
  //不能转小数,好象有最大值限制,因是很久前写的,没仔细看了  
  procedure   TForm1.BitBtn1Click(Sender:   TObject);  
  begin  
      Edit1.Text:=NumberBig(Edit1.Text);  
  end;  
   
  function   TForm1.NumberBig(Num:   String):   String;  
  Var  
      i:Integer;  
      StrTemp1,StrTemp2,Str:String;  
      NumTemp1:Integer;                        
  //每位数字  
      DoubZero,wanzero,ThreeZero:Boolean;      
  //判断十,个位是否同时为零  
      OneB:Boolean;                   //判断第二位是否为1  
      unitStr:TStringList;         //单位字符  
  begin  
      unitStr:=TStringList.Create;  
      unitStr.Add('HUNDRED');  
      unitStr.Add('THOUSAND');  
      unitStr.Add('MILLION');  
      StrTemp1:=Num;  
      For   i:=1   To     Length(StrTemp1)   Do  
          Str:=StrTemp1[i]+Str;  
      StrTemp1:=   Str   ;  
      Str:='';  
      For   i:=1   to   Length(StrTemp1)   Do  
      Begin  
          NumTemp1:=StrToInt(StrTemp1[i]);  
          If   OneB=True   Then  
          Begin  
              OneB:=False;  
              Continue;  
          End;  
          If   ((i=1)     or   (i=4)   OR   (i=7))   and   (StrTemp1[i+1]='1')     Then  
          Begin  
              Case   NumTemp1   Of  
              0:StrTemp2:='   TEN   ';  
              1:StrTemp2:='   ELEVEN   ';  
              2:StrTemp2:='   TWELVE   ';  
              3:StrTemp2:='   THIRTEEN   ';  
              4:StrTemp2:='   FOURTEEN   ';  
              5:StrTemp2:='   FIFTEEN   ';  
              6:StrTemp2:='   SIXTEEN   ';  
              7:StrTemp2:='   SEVENTEEN   ';  
              8:StrTemp2:='   EIGHTEEN   ';  
              9:StrTemp2:='   NINETEEN   ';  
              End;  
              OneB:=True;  
          End  
          Else   If   (i=2)   or   (i=5)   OR   (i=8)   Then  
          Case   NumTemp1   Of  
          0:StrTemp2:='';  
          1:StrTemp2:='   TEN   ';  
          2:StrTemp2:='   TWENTY   ';  
          3:StrTemp2:='   THIRTY   ';  
          4:StrTemp2:='   FORTY   ';  
          5:StrTemp2:='   FIFTY   ';  
          6:StrTemp2:='   SIXTY   ';  
          7:StrTemp2:='   SEVENTY   ';  
          8:StrTemp2:='   EIGHTY   ';  
          9:StrTemp2:='   NINETY   ';  
          End  
          Else  
          Case   NumTemp1   Of  
          0:StrTemp2:='';  
          1:StrTemp2:='ONE';  
          2:StrTemp2:='TWO';  
          3:StrTemp2:='THREE';  
          4:StrTemp2:='FOUR';  
          5:StrTemp2:='FIVE';  
          6:StrTemp2:='SIX';  
          7:StrTemp2:='SEVEN';  
          8:StrTemp2:='EIGHT';  
          9:StrTemp2:='NINE';  
          End   ;  
          If   StrTemp2=''   Then                     //当前位是否为零  
              wanzero:=True;  
          If   i=3   Then  
          Begin  
              If   wanzero=False   Then  
              Begin  
                  If   DoubZero=True   Then  
                      StrTemp2:=StrTemp2+'   '+unitStr.Strings[0]+'   AND   '  
                    Else  
                      StrTemp2:=StrTemp2+'   '+unitStr.Strings[0];  
              End  
              Else  
              Begin  
                  If   DoubZero=True   Then  
                      StrTemp2:=StrTemp2+'   AND   ';  
              End;  
          End  
          Else   If   (i=4)   and   (wanzero=False)   Then  
                  StrTemp2:=StrTemp2+'   '+unitStr.Strings[1]+'   '  
          Else   If   (i=5)   and   (wanzero=False)   and   (ThreeZero=False)   Then  
                    StrTemp2:=StrTemp2+'   '+unitStr.Strings[1]+'   '  
          Else   If   (i=6)   and   (wanzero=False)     Then  
          Begin  
              If   ThreeZero=False   Then  
                    StrTemp2:=StrTemp2+'   '+unitStr.Strings[0]+'   '+unitStr.Strings[1]+'   '  
              Else  
                    StrTemp2:=StrTemp2+'   '+unitStr.Strings[0]+'   ';  
          End  
          Else   If   i=7   Then  
                  StrTemp2:=StrTemp2+'   '+unitStr.Strings[2]+'   '  
          Else   If   (i=9)   and   (wanzero=False)   Then  
                    StrTemp2:=StrTemp2+'   '+unitStr.Strings[0];  
          If   StrTemp2<>''   Then                 //某位之前的数是否都为零  
              DoubZero:=True;  
          If   (i>3)   and   (StrTemp2<>'')   Then         //4,5,6位是否同时为零  
              ThreeZero:=True;  
          wanzero:=False;  
          Str:=StrTemp2+Str;  
      END;  
      unitStr.Free;  
      Result:=Str;  
  end;  
   
  Top

2 楼qiushuiwuhen(秋水无恨)回复于 2003-01-07 11:28:39 得分 100

<script>  
  var   arr1=new   Array("","   thousand","   million","   billion")  
  var   arr2=new   Array("zero","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety")  
  var   arr3=new   Array("zero","one","two","three","four","five","six","sever","eight","nine");  
  var   arr4=new   Array("ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen");  
   
  function   Translate(num){  
  var   len=num.length,i,j=0,strRet="";  
  var   cols=Math.ceil(len/3);  
  var   first=len-cols*3  
  var   strRet=""  
  for(i=first;i<len;i+=3){  
  ++j;  
  if(i>=0)  
  num3=num.substring(i,i+3)  
  else  
  num3=num.substring(0,first+3)  
  strEng=English(num3)  
  if(strEng!=""){  
  if(strRet!="") strRet+=","  
  strRet+=English(num3)+arr1[cols-j]  
  }  
  }  
  return   strRet  
  }  
  function   English(num){  
  strRet=""  
  if((num.length==3)&&(num.substr(0,3)!="000")){  
  if((num.substr(0,1)!="0")){  
  strRet+=arr3[num.substr(0,1)]+"   hundred"  
  if(num.substr(1,2)!="00")strRet+="   and   "  
  }  
  num=num.substring(1);  
  }  
  if((num.length==2)){  
  if((num.substr(0,1)=="0")){  
  num=num.substring(1)  
  }  
  else   if((num.substr(0,1)=="1")){  
  strRet+=arr4[num.substr(1,2)]  
  }  
  else{  
  strRet+=arr2[num.substr(0,1)]  
  if(num.substr(1,1)!="0")strRet+="-"  
  num=num.substring(1)  
  }  
  }  
  if((num.length==1)&&(num.substr(0,1)!="0")){  
  strRet+=arr3[num.substr(0,1)]  
  }  
  return   strRet;  
  }  
  function   qswh(num,type){  
  var   tmp=num.toString().split(".");  
  if(tmp.length==1)return   Translate(tmp[0]);  
  if(type=="rmb")return   Translate(tmp[0])+"   YUAN   "+Translate(tmp[1])+"   FEN";  
  return   Translate(tmp[0])+"   dollars   "+Translate(tmp[1])+"   cents";  
  }  
  </script>  
  <input   id=number   value=1220.21>  
  <input   type=button   value=Translate   onclick='alert(qswh(document.all.number.value,"rmb"))'>  
  <input   type=button   value=Translate   onclick=alert(qswh(document.all.number.value))>  
  Top

3 楼CXZ9(小笨笨)回复于 2003-05-23 08:43:05 得分 0

111Top

相关问题

  • PHP 函数 转成 ASP函数
  • C++ Builder函数转成 Delphi
  • 如何在php中得到js函数的返回值
  • int转成CString用什么函数?
  • 求UTF8转成ANSI的函数
  • 求一个int转成char *函数
  • PHP的copy函数
  • 这样的函数转成sql的函数可以吗?在线等!
  • 有没有十进制转成十六进制的函数呢?
  • 日期转成数字的函数是什么?

关键词

  • 数字
  • resultarray
  • unitstr
  • strtemp
  • dotarray
  • 小数
  • moneytype
  • oneb
  • numtemp
  • strtolower

得分解答快速导航

  • 帖主:CXZ9
  • qiushuiwuhen

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo