天天看点

数字转金额大写

数字转金额大写 javascript 和vba版

<script

 language

=javascript

>
function Arabia_to_Chinese(Num){
   for(i=Num.length-1;i>=0;i--)
   {
    Num = Num.replace(",","")//替换tomoney()中的“,”
    Num = Num.replace(" ","")//替换tomoney()中的空格
   }
   Num = Num.replace("¥","")//替换掉可能出现的¥字符
   if(isNaN(Num)) { //验证输入的字符是否为数字
    alert("请检查小写金额是否正确");
    return;
   }
   //---字符处理完毕,开始转换,转换采用前后两部分分别转换---//
   part = String(Num).split(".");
   newchar = ""; 
   //小数点前进行转化
   for(i=part[0].length-1;i>=0;i--){
   if(part[0].length > 10){ alert("位数过大,无法计算");return "";}//若数量超过拾亿单位,提示
    tmpnewchar = ""
    perchar = part[0].charAt(i);
    switch(perchar){
    case "0": tmpnewchar="零" + tmpnewchar ;break;
    case "1": tmpnewchar="壹" + tmpnewchar ;break;
    case "2": tmpnewchar="贰" + tmpnewchar ;break;
    case "3": tmpnewchar="叁" + tmpnewchar ;break;
    case "4": tmpnewchar="肆" + tmpnewchar ;break;
    case "5": tmpnewchar="伍" + tmpnewchar ;break;
    case "6": tmpnewchar="陆" + tmpnewchar ;break;
    case "7": tmpnewchar="柒" + tmpnewchar ;break;
    case "8": tmpnewchar="捌" + tmpnewchar ;break;
    case "9": tmpnewchar="玖" + tmpnewchar ;break;
    }
    switch(part[0].length-i-1){
    case 0: tmpnewchar = tmpnewchar +"元" ;break;
    case 1: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
    case 2: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
    case 3: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
    case 4: tmpnewchar= tmpnewchar +"万" ;break;
    case 5: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
    case 6: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
    case 7: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
    case 8: tmpnewchar= tmpnewchar +"亿" ;break;
    case 9: tmpnewchar= tmpnewchar +"拾" ;break;
    }
    newchar = tmpnewchar + newchar;
   }
   //小数点之后进行转化
   if(Num.indexOf(".")!=-1){
   if(part[1].length > 2) {
    alert("小数点之后只能保留两位,系统将自动截段");
    part[1] = part[1].substr(0,2)
    }
   for(i=0;i<part[1].length;i++){
    tmpnewchar = ""
    perchar = part[1].charAt(i)
    switch(perchar){
    case "0": tmpnewchar="零" + tmpnewchar ;break;
    case "1": tmpnewchar="壹" + tmpnewchar ;break;
    case "2": tmpnewchar="贰" + tmpnewchar ;break;
    case "3": tmpnewchar="叁" + tmpnewchar ;break;
    case "4": tmpnewchar="肆" + tmpnewchar ;break;
    case "5": tmpnewchar="伍" + tmpnewchar ;break;
    case "6": tmpnewchar="陆" + tmpnewchar ;break;
    case "7": tmpnewchar="柒" + tmpnewchar ;break;
    case "8": tmpnewchar="捌" + tmpnewchar ;break;
    case "9": tmpnewchar="玖" + tmpnewchar ;break;
    }
    if(i==0)tmpnewchar =tmpnewchar + "角";
    if(i==1)tmpnewchar = tmpnewchar + "分";
    newchar = newchar + tmpnewchar;
   }
   }
   //替换所有无用汉字
   while(newchar.search("零零") != -1)
    newchar = newchar.replace("零零", "零");
   newchar = newchar.replace("零亿", "亿");
   newchar = newchar.replace("亿万", "亿");
   newchar = newchar.replace("零万", "万");
   newchar = newchar.replace("零元", "元");
   newchar = newchar.replace("零角", "");
   newchar = newchar.replace("零分", "");

   if (newchar.charAt(newchar.length-1) == "元" || newchar.charAt(newchar.length-1) == "角")
    newchar = newchar+"整"
document.write(newchar);
   return newchar;

  }
</script

>
<SCRIPT

 LANGUAGE

="JavaScript"

>
function Chinese(num)  //将阿拉伯数字翻译成中文的大写数字
{
    if(!/^\d*(\.\d*)?$/.test(num)){alert("Number is wrong!"); return "Number is wrong!";}

    var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
    var BB = new Array("","拾","佰","仟","萬","億","点","");
    
    var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = "";

    for(var i=a[0].length-1; i>=0; i--)
    {
        switch(k)
        {
            case 0 : re = BB[7] + re; break;
            case 4 : if(!new RegExp("0{4}\\d{"+ (a[0].length-i-1) +"}$").test(a[0]))
                     re = BB[4] + re; break;
            case 8 : re = BB[5] + re; BB[7] = BB[5]; k = 0; break;
        }
        if(k%4 == 2 && a[0].charAt(i+2) != 0 && a[0].charAt(i+1) == 0) re = AA[0] + re;
        if(a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k%4] + re; k++;
    }

    if(a.length>1) //加上小数部分(如果有小数部分)
    {
        re += BB[6];
        for(var i=0; i<a[1].length; i++) re += AA[a[1].charAt(i)];
    }

    return re;

}
function rmb(price){
price=Chinese(price);
var newprice;
	if(price.search('点')>-1){
	var arr=price.split('点');
	var arrL=arr[0];
	var arrR=arr[1];
	var Jiao=arrR.charAt(0);
	var Fen=arrR.charAt(1);
		if(Fen=="")
			{newprice=arrL+'圆'+Jiao+'角整';}
		else{newprice=arrL+'圆'+Jiao+'角'+Fen+'分';}			
	}else{
	newprice=price+'圆整';
	}
document.write(newprice);
}
</script

>
<body

>
<form

 name

=thform

>
<input

 type

=text 

name

=nub

>
<input

 type

=button 

value

="转换" 

onclick

="Arabia_to_Chinese(document.thform.nub.value)"

>
</form

>
</body

>



用VBA自定义一个大写金额转换的函数,在公式中输入此函数名就可以了。 
具体方法:按 Alt+F11 ,在VBA编辑器菜单中点 插入→模块,将下面的函数复制到插入的模块当中, 

'=================================================================== 

Function CChinese(StrEng As String) As String 
'将阿拉伯数字转成中文字的程式例如:1560890 转成 "壹佰伍拾陆万零捌佰玖拾"。 
'程式限制为不可输入超过16个数字 
If Not IsNumeric(StrEng) Or StrEng Like "*.*" Or StrEng Like "*-*" Then 
If Trim(StrEng) <> "" Then MsgBox "无效的数字" 
CChinese = "": Exit Function 
End If 
Dim intLen As Integer, intCounter As Integer 
Dim strCh As String, strTempCh As String 
Dim strSeqCh1 As String, strSeqCh2 As String 
Dim strEng2Ch As String 
strEng2Ch = "零壹贰叁肆伍陆柒捌玖" 
strSeqCh1 = " 拾佰仟 拾佰仟
 拾佰仟 拾佰仟" 
strSeqCh2 = " 万亿兆" 
StrEng = CStr(CDec(StrEng)) 
intLen = Len(StrEng) 
For intCounter = 1 To intLen 
strTempCh = Mid(strEng2Ch, Val(Mid(StrEng, intCounter, 1)) + 1, 1) 
If strTempCh = "零" And intLen <> 1 Then 
If Mid(StrEng, intCounter + 1, 1) = "0" Or (intLen - intCounter + 1) Mod 4 = 1 Then 
strTempCh = "" 
End If 
Else 
strTempCh = strTempCh & Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1)) 
End If 
If (intLen - intCounter + 1) Mod 4 = 1 Then 
strTempCh = strTempCh & Mid(strSeqCh2, (intLen - intCounter + 1) \ 4 + 1, 1) 
If intCounter > 3 Then 
If Mid(StrEng, intCounter - 3, 4) = "0000" Then strTempCh = Left(strTempCh, Len(strTempCh) - 1) 
End If 
End If 
strCh = strCh & Trim(strTempCh) 
Next 
CChinese = strCh 
End Function 

'===================================================================
 


'=================================================================== 
Function daxie(money As String) As String 
'实现货币金额中文大写转换的程序 
'程式限制为不可输入超过16个数字 
Dim x As String, y As String 
Const zimu = ".sbqwsbqysbqwsbq" '定义位置代码 
Const letter = "0123456789sbqwy.zjf" '定义汉字缩写 
Const upcase = "零壹贰叁肆伍陆柒捌玖拾佰仟万亿圆整角分" '定义大写汉字 

If CDbl(money) >= 1E+16 Then daxie = "#VALUE!": Exit Function '只能转换一亿亿元以下数目的货币! 

x = Format(money, "0.00") '格式化货币 
y = "" 
For i = 1 To Len(x) - 3 
y = y & Mid(x, i, 1) & Mid(zimu, Len(x) - 2 - i, 1) 
Next 
If Right(x, 3) = ".00" Then 
y = y & "z" '***元整 
Else 
y = y & Left(Right(x, 2), 1) & "j" & Right(x, 1) & "f" '*元*角*分 
End If 
y = Replace(y, "0q", "0")
 '避免零千(如:40200肆万零千零贰佰) 
y = Replace(y, "0b", "0") '避免零百(如:41000肆万壹千零佰) 
y = Replace(y, "0s", "0") '避免零十(如:204贰佰零拾零肆) 

y = Replace(y, "0j", "0") '避免零角 
y = Replace(y, "0f", "") '避免零分 

Do While y <> Replace(y, "00", "0") 
y = Replace(y, "00", "0") '避免双零(如:1004壹仟零零肆) 
Loop 
y = Replace(y, "0y", "y") '避免零亿(如:210亿 贰佰壹十零亿) 
y = Replace(y, "0w", "w") '避免零万(如:210万 贰佰壹十零万) 
y = IIf(x < 0.1, Right(y, Len(y) - 3), y) '避免零几分(如:0.01零壹分;0.04零肆分) 
y = IIf(Len(x) = 5 And Left(y, 1) = "1", Right(y, Len(y) - 1), y) '避免壹十(如:14壹拾肆;10壹拾) 
y = IIf(Len(x) = 4, Replace(y, "0.", ""), Replace(y, "0.", ".")) '避免零元(如:20.00贰拾零圆;0.12零圆壹角贰分) 

For i = 1 To 19 
y = Replace(y,
 Mid(letter, i, 1), Mid(upcase, i, 1)) '大写汉字 
Next 
daxie = y 
End Function 
'=================================================================== 
      

继续阅读