网上荡来的 不要鄙视砸门啊
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("%019.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;
}
//人民币金额转大写程序 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)).toString()).split('.');
num = (num[0]).substring(0, (num[0]).length-2)+'.'+ (num[0]).substring((num[0]).length-2,(num[0]).length);
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),10)!=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、 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
//人民币金额转大写程序 jsp, Java版
//CopyRight Bardo QI
//警告,因为未装JAVA编译器,所以,这一代码未经测试!
import java.util.ArrayList;
import java.util.Math.*;
import java.lang.*;
String numToCny(String num){
String capUnit[] ={"万","亿","万","圆",""};
String capDigit[][] = { {""},{""},{"角","分",""},{""},{"仟","佰","拾",""}};
String capNum[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
if (num.indexOf(".") > 16)
return "ERROR";
double dnum=Double.parseDouble(num);
dnum = Math.round(dnum*100)/100;
if (Double.isNaN(dnum))
return "ERROR";
String snum = Double.toString(dnum);
double pnum = Math.pow(10,19-snum.length());
String psnum = Double.toString(pnum);
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+(int)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[Integer.parseInt(nodeNum.substring(k,k+1))]+((nodeNum.substring(k,k+1).equals("0"))?"":capDigit[len][k]));
if (!((CurChr.get(0)==CurChr.get(1)) && (CurChr.get(0)==capNum[0])))
if(!((CurChr.get(k%2) == capNum[0]) && (subret.equals("")) && (ret.equals(""))))
subret += CurChr.get(k%2);
}
subChr = subret + ((subret.equals(""))?"":capUnit[i]);
if(!((subChr == capNum[0]) && (ret.equals(""))))
ret += subChr;
}
ret=(ret.equals(""))? capNum[0]+capUnit[3]: ret;
return ret;
}
//人民币金额转大写程序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("%019.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版本
#Copyright: zinges at foxmail.com
#blog: http://zingers.iteye.com
#感谢zinges提供了Python的版本
import math
def numtoCny(num):
capUnit = ['万','亿','万','圆','']
capDigit = { 2:['角','分',''], 4:['仟','佰','拾','']}
capNum=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
snum = str('%019.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 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;
}
'人民币金额转大写程序 VB.Net版
'CopyRight Bardo QI
Function numToCny(ByVal num)
Dim capUnit() As String = {"万", "亿", "万", "圆", ""}
Dim capDigit(,) As String = {{"", "", "", ""}, {"", "", "", ""}, {"角", "分", "", ""}, {"", "", "", ""}, {"仟", "佰", "拾", ""}}
Dim capNum() As String = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}
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
Dim CurChr() = {"", ""}, nodeNum As String, subret As String, subChr As String, slen As Integer, i As Integer, j As Integer, k As Integer
Dim ret As String = ""
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
numToCny = IIf((ret = ""), capNum(0) + capUnit(3), ret)
End Function
//人民币金额转大写程序C#版
//CopyRight Bardo QI
string numtoCny(decimal Num){
string[] capUnit = {"万","亿","万","圆",""};
string[,] capDigit = { { "", "", "", "" }, { "", "", "", "" }, { "角", "分", "", "" }, { "", "", "", "" }, { "仟", "佰", "拾", "" } };
string[] capNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
string num, ret = "", nodeNum = "", subret, subChr;
string[] thisChr={"",""};
num = String.Format("{0:0000000000000000.00}",Num);
if(num.IndexOf(".")>16)
return ret;
int i,j,k,len,ch;
for (i=0,j=0;i<5;i++,j=i*4 + int.Parse(Math.Floor((double)i/4).ToString()) ){
len = (j < 17) ? 4 : 2;
nodeNum = num.Substring(j, len);
subret="";
for (k = 0; ((k < len) && (int.Parse(nodeNum.Substring(k, len - k)) != 0)); k++){
ch = int.Parse(nodeNum.Substring(k, 1));
thisChr[i%2] = capNum[ch];
thisChr[i % 2] += (ch == 0) ? "" : capDigit[len,k];
if (!((thisChr[0] == thisChr[1]) && (thisChr[i % 2] == capNum[0])))
if (!((thisChr[i % 2] == capNum[0]) && (subret == "") && (ret == "")))
subret += thisChr[i % 2];
}
subChr = subret;
subChr += (subret=="")?"":capUnit[i];
if(!((subChr == capNum[0]) && (ret=="")))
ret += subChr;
}
ret=(ret=="")? capNum[0]+capUnit[3]:ret;
return ret;
}
}
非常给力,果断收藏了。嘎嘎