//php
//人民币金额转大写程序 PHP版 //CopyRight Bardo QI function numToCny($num){ $capUnit=array('万','亿','万','圆',''); $capDigit=array(2=>array('角','分',''), 4=>array('仟','佰','拾','')); $capNum=array('零','壹','贰','叁','肆','伍','陆','柒','捌','玖'); if ((strpos(strval($num),'.')>16)||(!is_numeric($num))) return ''; $num = sprintf("9.2f",$num); $CurChr=array('',''); for ($i=0,$ret='',$j=0;$i<5;$i++,$j=$i*4+floor($i/4)){ $nodeNum=substr($num,$j,4); for($k=0,$subret='',$len=strlen($nodeNum);(($k<$len)&&(intval(substr($nodeNum,$k))!=0));$k++){ $CurChr[$k%2] = $capNum[$nodeNum{$k}].(($nodeNum{$k}==0)?'':$capDigit[$len][$k]); if (!(($CurChr[0]==$CurChr[1]) && ($CurChr[$k%2]==$capNum[0]))) if(!(($CurChr[$k%2] == $capNum[0]) && ($subret=='') && ($ret==''))) $subret .= $CurChr[$k%2]; } $subChr = $subret.(($subret=='')?'':$capUnit[$i]); if(!(($subChr == $capNum[0]) && ($ret==''))) $ret .= $subChr; } $ret=($ret=="")?$capNum[0].$capUnit[3]:$ret; return $ret; }
//Js代码
//人民币金额转大写程序 JavaScript版 //CopyRight Bardo QI function numToCny(num){ var capUnit = ['万','亿','万','圆','']; var capDigit = { 2:['角','分',''], 4:['仟','佰','拾','']}; var capNum=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; if (((num.toString()).indexOf('.') > 16)||(isNaN(num))) return ''; num = (Math.round(num*100)/100).toString(); num =((Math.pow(10,19-num.length)).toString()).substring(1)+num; var i,ret,j,nodeNum,k,subret,len,subChr,CurChr=[]; for (i=0,ret='';i<5;i++,j=i*4+Math.floor(i/4)){ nodeNum=num.substring(j,j+4); for(k=0,subret='',len=nodeNum.length;((k<len) && (parseInt(nodeNum.substring(k))!=0));k++){ CurChr[k%2] = capNum[nodeNum.charAt(k)]+((nodeNum.charAt(k)==0)?'':capDigit[len][k]); if (!((CurChr[0]==CurChr[1]) && (CurChr[0]==capNum[0]))) if(!((CurChr[k%2] == capNum[0]) && (subret=='') && (ret==''))) subret += CurChr[k%2]; } subChr = subret + ((subret=='')?'':capUnit[i]); if(!((subChr == capNum[0]) && (ret==''))) ret += subChr; } ret=(ret=='')? capNum[0]+capUnit[3]: ret; return ret; }
//Asp代码
'人民币金额转大写程序 Asp、 Vb6版 'CopyRight Bardo QI Function numToCny(num) capUnit = Array("万", "亿", "万", "圆", "") capDigit = Array(Array(), Array(), Array("角", "分", ""), Array(), Array("仟", "佰", "拾", "")) capNum = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") If (((InStr(1, num, ".") > 16) Or (Not IsNumeric(num)))) Then numToCny = "" Exit Function End If num = FormatNumber(num, 2, , , 0) num = Mid(CStr(10 ^ (19 - Len(num))), 2) + num CurChr = Array("", "") ret = "" For i = 0 To 4 j = i * 4 + Int(i / 4) + 1 nodeNum = Mid(num, j, 4) slen = Len(nodeNum) subret = "" For k = 1 To slen If Int(Mid(nodeNum, k)) = 0 Then Exit For End If CurChr(k Mod 2) = capNum(Int(Mid(nodeNum, k, 1))) + IIf(Int(Mid(nodeNum, k, 1)) = 0, "", capDigit(slen)(k - 1)) If (Not ((CurChr(0) = CurChr(1)) And (CurChr(0) = capNum(0)))) Then If (Not ((CurChr(k Mod 2) = capNum(0)) And (subret = "") And (ret = ""))) Then subret = subret + CurChr(k Mod 2) End If End If Next subChr = subret + IIf((subret = ""), "", capUnit(i)) If (Not ((subChr = capNum(0)) And (ret = ""))) Then ret = ret + subChr End If Next ret=Iif((ret=""), capNum(0)+capUnit(3), ret) numToCny = ret End Function
//Java代码
//人民币金额转大写程序 jsp, Java版 //CopyRight Bardo QI //警告,因为未装JAVA编译器,所以,这一代码未经测试! import java.util.ArrayList; import java.util.Math.*; import java.lang.*; String function numToCny(double num){ String capUnit[] = {'万','亿','万','圆',''}; String capDigit[][] = { {''},{''},{'角','分',''},{''} {'仟','佰','拾',''}}; String capNum[]={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; if (((num.toString()).indexOf('.') > 16)||(isNaN(num))) return ''; double dnum = Math.round(num*100)/100; String snum = dnum.toString(); double pnum = Math.pow(10,19-snum.length()); String psnum = pnum.toString(); snum = psnum.substring(1)+snum; String ret,nodeNum,subret,subChr; ArrayList CurChr = new ArrayList(2); int i,j,k,len; for (i=0,ret='';i<5;i++,j=i*4+Math.floor(i/4)){ nodeNum=snum.substring(j,j+4); for(k=0,subret='',len=nodeNum.length();((k<len) && (Integer.parseInt(nodeNum.substring(k))!=0));k++){ CurChr.set(k%2,capNum[nodeNum.charAt(k)]+((nodeNum.charAt(k)=='0')?'':capDigit[len][k])); if (!((CurChr.get(0)==CurChr.get(1)) && (CurChr.get(0)==capNum[0]))) if(!((CurChr.get(k%2) == capNum[0]) && (subret=='') && (ret==''))) subret += CurChr.get(k%2); } subChr = subret + ((subret=='')?'':capUnit[i]); if(!((subChr == capNum[0]) && (ret==''))) ret += subChr; } ret=(ret=='')? capNum[0]+capUnit[3]: ret; return ret; }
//Cpp代码
//人民币金额转大写程序VC++版 //CopyRight Bardo QI CString numtoCny(double Num) { char* capUnit[]={"万","亿","万","圆",""}; char* capDigit[5][4]={{""},{""},{"角","分",""},{""},{"仟","佰","拾",""}}; char* capNum[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; CString num,ret="",nodeNum="",subret,subChr,thisChr,lastChr,ch; num.Format("9.2f",Num); if(num.Find(".")>16) return ret; int i,j,k,len,chn; for (i=0;i<5;i++,j=i*4+int(i/4)){ nodeNum= num.Mid(j,4); subret=""; lastChr=""; for(k=0,len=nodeNum.GetLength();((k<len)&&(atoi((LPCTSTR)nodeNum.Mid(k,4-k))!=0));k++){ ch= nodeNum[k]; chn=atoi((LPCTSTR)ch); thisChr = capNum[chn] ; thisChr += (chn==0) ? "" : capDigit[len][k]; if (!((thisChr==lastChr) && (thisChr==capNum[0]))) if(!((thisChr == capNum[0]) && (subret=="") && (ret==""))) subret += thisChr; lastChr=thisChr; } subChr = subret; subChr += (subret=="")?"":capUnit[i]; if(!((subChr == capNum[0]) && (ret==""))) ret += subChr; } (ret=="")?ret.Format("%s%s",capNum[0],capUnit[3]):ret; return ret; }
//Python代码
#人民币金额转大写程序Python版本 #Copyright: zinges at foxmail.com #blog: http://zingers.iteye.com #感谢zinges提供了Python的版本 import math def numtoCny(num): capUnit = ['万','亿','万','圆',''] capDigit = { 2:['角','分',''], 4:['仟','佰','拾','']} capNum=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'] snum = str('9.02f') % num if snum.index('.')>16: return '' ret,nodeNum,subret,subChr='','','','' CurChr=['',''] for i in range(5): j=int(i*4+math.floor(i/4)) subret='' nodeNum=snum[j:j+4] lens=len(nodeNum) for k in range(lens): if int(nodeNum[k:])==0: continue CurChr[k%2] = capNum[int(nodeNum[k:k+1])] if nodeNum[k:k+1] != '0': CurChr[k%2] += capDigit[lens][k] if not ((CurChr[0]==CurChr[1]) and (CurChr[0]==capNum[0])): if not((CurChr[k%2] == capNum[0]) and (subret=='') and (ret=='')): subret += CurChr[k%2] subChr = [subret,subret+capUnit[i]][subret!=''] if not ((subChr == capNum[0]) and (ret=='')): ret += subChr return [ret,capNum[0]+capUnit[3]][ret=='']
//Actionscript代码
//人民币金额转大写程序 ActionScript 3.0版 //CopyRight Bardo QI public function numToCny(num:String):String{ var capUnit:Array =['万','亿','万','圆','']; var capDigit:Array = [[],[], ['角','分',''],[], ['仟','佰','拾','']]; var capNum:Array=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; if ((num.indexOf('.') > 16)||(isNaN(parseFloat(num)))) return ''; var dnum:Number = Math.round(parseFloat(num)*100)/100; num = dnum.toString(); var inum:Number = Math.pow(10,19-num.length); var pnum:String = inum.toString(); num = pnum.substring(1)+num; var i:Number,ret:String,j:Number,nodeNum:String,k:Number,subret:String,len:Number,subChr:String,CurChr:Array=['','']; for (i=0,ret='';i<5;i++,j=i*4+Math.floor(i/4)){ nodeNum=num.substring(j,j+4); for(k=0,subret='',len=nodeNum.length;((k<len) && (parseInt(nodeNum.substring(k))!=0));k++){ CurChr[k%2] = capNum[parseInt(nodeNum.charAt(k))]+((nodeNum.charAt(k)=='0')?'':capDigit[len][k]); if (!((CurChr[0]==CurChr[1]) && (CurChr[0]==capNum[0]))) if(!((CurChr[k%2] == capNum[0]) && (subret=='') && (ret==''))) subret += CurChr[k%2]; } subChr = subret + ((subret=='')?'':capUnit[i]); if(!((subChr == capNum[0]) && (ret==''))) ret += subChr; } ret=(ret=='')? capNum[0]+capUnit[3]: ret; return ret; }
原文http://bardo.iteye.com/blog/983559