还有一点bug,不过大部分还是可以的了
<html>
<head>
<script language="javascript">
function toChinese(num){
var arr1=new Array("元","万","亿");
num=num.toString();
var strRtn="";
if(num.charAt(0)=="-"){
strRtn+="(<b>负</b>)";
num=num.substring(1,num.length);
}
if(num.split(".")[0].length>12){ /*alert("数值超过千亿,无法识别!");*/ return "数值超过千亿,无法识别!";}
var ss=num.split(".");
var Integer=ss[0];
var Float=ss[1];
var part=splitFour(Integer);
var plen=part.length;
for(var i=0;i<plen;i++){
if(i==0 && plen > 1){
strRtn+=ReadFour(part[i],0);
if(!IsZero(part[i]))
strRtn+=arr1[plen-1-i];
}
else strRtn+=ReadFour(part[i],1)+arr1[plen-1-i];
}
if(!Float || IsZero(Float)) {
strRtn+="整"
}else{
strRtn+=AfterPoint(Float);
}
return strRtn;
}function AfterPoint(num){
var arr1=new Array("角","分");
var arr2=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var str="";
for(var i=0;i<num.length;i++){
if(num.charAt(i)!="0")
str+=arr2[num.charAt(i)]+arr1[i];
else{
if(i!=num.length-1) str+="零";
}
}
return str;
}
function splitFour(num){
var len=num.length;
var count=Math.ceil(len/4);
var arr=new Array("");
for(var i=0;i<count;i++){
arr[count-i-1]=num.substring(len-4,len);
len-=4;
}
return arr;
}function ReadFour(num,iFlag){
var arr1=new Array("","拾","佰","仟");
var arr2=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
num=num.toString();
var strRtn="";
len=num.length
for(var i=len-1;i>=0;i--){
if(num.charAt(len-i-1)!="0"){
strRtn+=arr2[num.charAt(len-i-1)]+arr1[i];
//alert(strRtn);
}
else{
if(iFlag!=0 && strRtn.charAt(strRtn.length-1)!="零" && IsZero(num.substring(len-i,len)))
strRtn+="零";
}
}
return strRtn;
}
function IsZero(str){
return (parseInt(str,10)==0?true:false);
}
function format(num){
var tmpVar=Math.round(parseFloat(num,10)*100)/100;
var arr=tmpVar.toString().split(".");
if(arr[1]){
return tmpVar+(arr[1].length==1?"0":"");
}else
return tmpVar+".00";
}
function keyPressFlt(src){
var e=window.event;
code=e.keyCode;
if(code >=48 && code <=57) return true;
else if(code == 46 && src.value.indexOf('.')==-1) return true;
else{ window.event.keyCode=null; return false; }
}
</script>
</head>
<body>
<input id="txtNum" name="txtNum" width="140" value="100000000000" onkeypress="keyPressFlt(this)">
<input type="button" onclick="javascript:txtRmb.value=toChinese(txtNum.value)" value="转换">
<p><input type="text" id="txtRmb" name="txtRmb" style="width:100%"></p>
</body>
</html>
<html>
<head>
<script language="javascript">
function toChinese(num){
var arr1=new Array("元","万","亿");
num=num.toString();
var strRtn="";
if(num.charAt(0)=="-"){
strRtn+="(<b>负</b>)";
num=num.substring(1,num.length);
}
if(num.split(".")[0].length>12){ /*alert("数值超过千亿,无法识别!");*/ return "数值超过千亿,无法识别!";}
var ss=num.split(".");
var Integer=ss[0];
var Float=ss[1];
var part=splitFour(Integer);
var plen=part.length;
for(var i=0;i<plen;i++){
if(i==0 && plen > 1){
strRtn+=ReadFour(part[i],0);
if(!IsZero(part[i]))
strRtn+=arr1[plen-1-i];
}
else strRtn+=ReadFour(part[i],1)+arr1[plen-1-i];
}
if(!Float || IsZero(Float)) {
strRtn+="整"
}else{
strRtn+=AfterPoint(Float);
}
return strRtn;
}function AfterPoint(num){
var arr1=new Array("角","分");
var arr2=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var str="";
for(var i=0;i<num.length;i++){
if(num.charAt(i)!="0")
str+=arr2[num.charAt(i)]+arr1[i];
else{
if(i!=num.length-1) str+="零";
}
}
return str;
}
function splitFour(num){
var len=num.length;
var count=Math.ceil(len/4);
var arr=new Array("");
for(var i=0;i<count;i++){
arr[count-i-1]=num.substring(len-4,len);
len-=4;
}
return arr;
}function ReadFour(num,iFlag){
var arr1=new Array("","拾","佰","仟");
var arr2=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
num=num.toString();
var strRtn="";
len=num.length
for(var i=len-1;i>=0;i--){
if(num.charAt(len-i-1)!="0"){
strRtn+=arr2[num.charAt(len-i-1)]+arr1[i];
//alert(strRtn);
}
else{
if(iFlag!=0 && strRtn.charAt(strRtn.length-1)!="零" && IsZero(num.substring(len-i,len)))
strRtn+="零";
}
}
return strRtn;
}
function IsZero(str){
return (parseInt(str,10)==0?true:false);
}
function format(num){
var tmpVar=Math.round(parseFloat(num,10)*100)/100;
var arr=tmpVar.toString().split(".");
if(arr[1]){
return tmpVar+(arr[1].length==1?"0":"");
}else
return tmpVar+".00";
}
function keyPressFlt(src){
var e=window.event;
code=e.keyCode;
if(code >=48 && code <=57) return true;
else if(code == 46 && src.value.indexOf('.')==-1) return true;
else{ window.event.keyCode=null; return false; }
}
</script>
</head>
<body>
<input id="txtNum" name="txtNum" width="140" value="100000000000" onkeypress="keyPressFlt(this)">
<input type="button" onclick="javascript:txtRmb.value=toChinese(txtNum.value)" value="转换">
<p><input type="text" id="txtRmb" name="txtRmb" style="width:100%"></p>
</body>
</html>
解决方案 »
- js中正则表达式(继续)疑问?
- yui3 widget plugin
- document.body.scrollHeight在IE8和FF中取得的值为什么不一样?
- 如何阻止字符显示
- 文件类型声明
- js 传递值的时候出现问题
- 单引号在HTML的Input里转义?
- 求一javascript?我点击一个文字,隐藏一个表格,然后再点击这个文字,再显示这个图片!
- 移动选择(select——option)标签,为什么点击之后不能一次全部移动?
- 请问如何实现两个可多选的列表框之间的数据传递
- 大家来看看这个算法:有关数字转换成中文大写
- sel_list.add(new Option("1","1")),这个new Option里还有其他参数吗?
货币大写转换函数的更新<%
dim a '要转换成大写的金额
dim atoc '转换之后的值
Dim String1 '如下定义
Dim String2 '如下定义
Dim String3 '从原A值中取出的值
Dim I '循环变量
Dim J 'A的值乘以100的字符串长度
Dim Ch1 '数字的汉语读法
Dim Ch2 '数字位的汉字读法
Dim nZero '用来计算连续的零值是几个String1 = "零壹贰叁肆伍陆柒捌玖"
String2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"
nZero = 0If InStr(1, CStr(a * 100), ".") <> 0 Then
err.Raise 5000, , "此函数( AtoC() )只能转换小数点后有两位以内的数!"
End IfJ = Len(CStr(a * 100))
String2 = Right(String2, J) '取出对应位数的STRING2的值For I = 1 To J
String3 = Mid(a * 100, I, 1) '取出需转换的某一位的值If I <> (J - 3) + 1 And I <> (J - 7) + 1 And I <> (J - 11) + 1 And I <>(J - 15) + 1 Then
If String3 = 0 Then
Ch1 = ""
Ch2 = ""
nZero = nZero + 1
ElseIf String3 <> 0 And nZero <> 0 Then
Ch1 = "零" & Mid(String1, clng(String3) + 1, 1)
Ch2 = Mid(String2, I, 1)
nZero = 0
Else
Ch1 = Mid(String1, clng(String3) + 1, 1)
Ch2 = Mid(String2, I, 1)
nZero = 0
End If
Else '该位是万亿,亿,万,元位等关键位
If String3 <> 0 And nZero <> 0 Then
Ch1 = "零" & Mid(String1, clng(String3) + 1, 1)
Ch2 = Mid(String2, I, 1)
nZero = 0
ElseIf String3 <> 0 And nZero = 0 Then
Ch1 = Mid(String1, clng(String3) + 1, 1)
Ch2 = Mid(String2, I, 1)
nZero = 0
ElseIf String3 = 0 And nZero >= 3 Then
Ch1 = ""
Ch2 = ""
nZero = nZero + 1
Else
Ch1 = ""
Ch2 = Mid(String2, I, 1)
nZero = nZero + 1
End IfIf I = (J - 11) + 1 Or I = (J - 3) + 1 Then '如果该位是亿位或元位,则必须写上
Ch2 = Mid(String2, I, 1)
End IfEnd If
AtoC = AtoC & Ch1 & Ch2If I = J And String3 = 0 Then '最后一位(分)为0时,加上“整”
AtoC = AtoC & "整"
End IfNext
if a=0 then
atoc="零元整"
end if
%>
<!--
function Chinese(num)
{
if(!/^\d*(\.\d*)?$/.test(num)) throw(new Error(-1, "Number is wrong!")); var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var BB = new Array("","拾","佰","仟","萬","億","圆","");
var CC = 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)=="0" && a[0].charAt(i+2) != "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)] + CC[i];
if(i==2) break;
}
}
return re;
}
document.write(Chinese("120.36"));
//-->
</SCRIPT>
~~~ 不错。
呵呵我也写一个。<?
$z=array("元","拾","佰","仟","万");
$x=array("角","分");
$y=array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
$val=11243.32;
$test="".round($val,2);
$k=$j=strlen($test)-strlen(strstr($test,"."))-1;
for($i=0;$i<=$k;$i++){
$out2.=$y[$test[$i]].$z[$j--];
}$k=strlen(strstr($test,"."))-1;
$j=0;
$test=strstr($test,".");
for($i=1;$i<=$k;$i++){
$out.=$y[$test[$i]].$x[$j++];
}
echo $out2;
?>
无意中搜到此贴,提供一个较完善的:<script>
function toRMB(str){
var str1="",str2="",str3="",str4="",j=0,z=0,Finddot=false;
//检查输入的合法性
if(str.length<1){alert("请输入至少一个数字");return "";}
for(j=0;j<str.length;j++){
if(0+str1==0)str1="";
if(str.charCodeAt(j)>47&&str.charCodeAt(j)<58){
str1+=str.charAt(j);
}else if(str.charCodeAt(j)==46&&Finddot==false){
Finddot=true;
str1+=str.charAt(j);
}else{
if(confirm("你输入的数字含有非法的字符,你还要继续转换吗?")==false)return "";
}
}
if(Finddot==false)str1+=".00";
if(str.length>16){alert("数值太大,无法正确转换");return "";}
//检查结束 //开始转换
str2="零壹贰叁肆伍陆柒捌玖";
str3="分角 元拾佰仟万拾佰仟亿拾佰仟万";
for(j=str1.length-1;j>=0;j--){
if(str1.charAt(str1.length-1-j)=="0"){
if(str3.charAt(j)=="万"||str3.charAt(j)=="亿"){str4+=str3.charAt(j);z=0;}else{z++;}
}else if(z>0&&str1.charAt(str1.length-1-j)!="."){
str4+="零"+str2.charAt(str1.charAt(str1.length-1-j))+str3.charAt(j);
z=0;
}else if(str1.charAt(str1.length-1-j)!="."){
str4+=str2.charAt(str1.charAt(str1.length-1-j))+str3.charAt(j);
}
}
if(str4.substring(str4.length-1)=="元")str4+="正";
else if(str4.substring(str4.length-1)!="角"&&str4.substring(str4.length-1)!="分")str4+="元正";
return str4;
//转换结束
}
</script>
<input name=orgnum type=text>
<input type="button" value="转换" onClick="alert(toRMB(orgnum.value));">
function toRMB(str){
var str1="",str2="",str3="",str4="",j=0,z=0,Finddot=false;
//检查输入的合法性
if(str.length<1){alert("请输入至少一个数字");return "";}
for(j=0;j<str.length;j++){
if(0+str1==0)str1="";
if(str.charCodeAt(j)>47&&str.charCodeAt(j)<58){
str1+=str.charAt(j);
}else if(str.charCodeAt(j)==46&&Finddot==false){
Finddot=true;
str1+=str.charAt(j);
}else{
if(confirm("你输入的数字含有非法的字符,你还要继续转换吗?")==false)return "";
}
}
if(Finddot==false)str1+=".00";
if(str1.length>16){alert("数值太大,无法正确转换");return "";}
//检查结束 //开始转换
str2="零壹贰叁肆伍陆柒捌玖";
str3="分角 元拾佰仟万拾佰仟亿拾佰仟万";
for(j=str1.length-1;j>=0;j--){
if(str1.charAt(str1.length-1-j)=="0"){
if(str3.charAt(j)=="万"||str3.charAt(j)=="亿"){str4+=str3.charAt(j);z=0;}else{z++;}
}else if(z>0&&str1.charAt(str1.length-1-j)!="."){
str4+="零"+str2.charAt(str1.charAt(str1.length-1-j))+str3.charAt(j);
z=0;
}else if(str1.charAt(str1.length-1-j)!="."){
str4+=str2.charAt(str1.charAt(str1.length-1-j))+str3.charAt(j);
}
}
if(str4.substring(str4.length-1)=="元")str4+="正";
else if(str4.substring(str4.length-1)!="角"&&str4.substring(str4.length-1)!="分")str4+="元正";
return str4;
//转换结束
}
</script>
<input name=orgnum type=text>
<input type="button" value="转换" onClick="alert(toRMB(orgnum.value));">