<html> <body> <script> var num=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"]; var arr=["","十","百","千","万","十","百","千","亿"]; function GetValue(str){ var result=""; var length=str.length; for(var i=0;i<length;i++){ if(str.charAt(i)!="0"){ result+=num[str.charAt(i)*1]+arr[length-1-i]; }else{ result+="零"; } } return result; } var s=GetValue("123213"); alert(s); </script> </body> </html>这样很简洁,不过得出的字符串可以再处理一下,比如去掉重复的"零"
//借你的问提学习消化高手们的技术,^__^<html> <body> <script> var num=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"]; var arr=["","十","百","千","万","十","百","千","亿","十","百","千","万"]; function tochina(str){ var result=""; var length=str.length; for(var i=0;i<length;i++){ if(str.charAt(i)!="0"){
result+=num[str.charAt(i)*1]+arr[length-1-i];
}else{ if ((i>0)&&(str.charAt(i-1)*1)==0){ result=result;
}else{
if ((length-i>8)&&((str.substring(i+1,length-9))*1==0)){ result+="亿零"; }
else{ if ((length-i>4)&&((str.substring(i+1,length-5))*1==0)){ result+="万零"; }else{ result+="零"; } } } } } return result; } var s=tochina("1210000913"); alert(s); </script> </body> </html>
谢谢大家! 我认为的最佳答案:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>无标题文档</title> <script> function getUppercase(number){ //最大千万位 var intPart = parseInt(number).toString(); //整数部分 if(intPart.length > 8){ alert("数字长度超过限制,最大只能转换千万元位!"); return ""; } var floatPart; //小数部分 if(number.indexOf(".") > -1){ floatPart = number.substr(number.indexOf(".") + 1); } else{ floatPart = "00"; } var digitalCn = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"); var unitCn = new Array("元","拾","佰","仟","万"); //元、角、分因位置固定,可直接判断,不需要计算 var dArray = new Array(); //由小写数字组成的数组,dArray([m][n])。m=数字长度,n=2;n0=数字,n1=数字排位 var n = intPart.length; for(i=0;i<intPart.length;i++){ n--; dArray[i] = new Array(intPart.substr(i,1),n); } var resultStr = ""; var mod; var divisor = 5; var tenGrand = 4; //万位 for(i=0;i<dArray.length;i++){ if(dArray[i][0] == 0 && dArray[i][1] != 0 && dArray[i][1] != 4){ //某位为0,且不是最后一位和万位时,不加单位 resultStr += digitalCn[dArray[i][0]]; }else{ mod = dArray[i][1] % divisor if(dArray[i][1] >= divisor){mod += 1;} resultStr += digitalCn[dArray[i][0]] + unitCn[mod]; } } // alert(resultStr); var re re = /零+万/ig; resultStr = resultStr.replace(re,"万零"); //万前面的N个零都替换成“万零” re = /零{2,}/ig; resultStr = resultStr.replace(re,"零"); //不是“元”前面的2个以上的零都替换成1个零 if(floatPart != "00"){ re = /零+元/ig; resultStr = resultStr.replace(re,"零"); //“元”前面N个零都替换成“元” resultStr += digitalCn[parseInt(floatPart.substr(0,1))] + "角"; resultStr += digitalCn[parseInt(floatPart.substr(1,1))] + "分"; }else{ re = /零+元/ig; resultStr = resultStr.replace(re,"元"); //“元”前面N个零都替换成“元” resultStr += "整"; } return "人民币:"+resultStr; } function change() { var str = document.getElementById("txt").value; alert(getUppercase(str));
<body>
<script>
var num=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
var arr=["","十","百","千","万","十","百","千","亿"];
function GetValue(str){
var result="";
var length=str.length;
for(var i=0;i<length;i++){
if(str.charAt(i)!="0"){
result+=num[str.charAt(i)*1]+arr[length-1-i];
}else{
result+="零";
}
}
return result;
}
var s=GetValue("123213");
alert(s);
</script>
</body>
</html>这样很简洁,不过得出的字符串可以再处理一下,比如去掉重复的"零"
<body>
<script>
var num=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
var arr=["","十","百","千","万","十","百","千","亿","十","百","千","万"];
function tochina(str){
var result="";
var length=str.length;
for(var i=0;i<length;i++){
if(str.charAt(i)!="0"){
result+=num[str.charAt(i)*1]+arr[length-1-i];
}else{
if ((i>0)&&(str.charAt(i-1)*1)==0){
result=result;
}else{
if ((length-i>8)&&((str.substring(i+1,length-9))*1==0)){
result+="亿零";
}
else{
if ((length-i>4)&&((str.substring(i+1,length-5))*1==0)){
result+="万零";
}else{
result+="零";
}
}
}
}
}
return result;
}
var s=tochina("1210000913");
alert(s);
</script>
</body>
</html>
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script>
function getUppercase(number){ //最大千万位
var intPart = parseInt(number).toString(); //整数部分
if(intPart.length > 8){
alert("数字长度超过限制,最大只能转换千万元位!");
return "";
}
var floatPart; //小数部分
if(number.indexOf(".") > -1){
floatPart = number.substr(number.indexOf(".") + 1);
}
else{
floatPart = "00";
}
var digitalCn = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var unitCn = new Array("元","拾","佰","仟","万"); //元、角、分因位置固定,可直接判断,不需要计算
var dArray = new Array(); //由小写数字组成的数组,dArray([m][n])。m=数字长度,n=2;n0=数字,n1=数字排位
var n = intPart.length;
for(i=0;i<intPart.length;i++){
n--;
dArray[i] = new Array(intPart.substr(i,1),n);
}
var resultStr = "";
var mod;
var divisor = 5;
var tenGrand = 4; //万位
for(i=0;i<dArray.length;i++){
if(dArray[i][0] == 0 && dArray[i][1] != 0 && dArray[i][1] != 4){ //某位为0,且不是最后一位和万位时,不加单位
resultStr += digitalCn[dArray[i][0]];
}else{
mod = dArray[i][1] % divisor
if(dArray[i][1] >= divisor){mod += 1;}
resultStr += digitalCn[dArray[i][0]] + unitCn[mod];
}
}
// alert(resultStr);
var re
re = /零+万/ig;
resultStr = resultStr.replace(re,"万零"); //万前面的N个零都替换成“万零”
re = /零{2,}/ig;
resultStr = resultStr.replace(re,"零"); //不是“元”前面的2个以上的零都替换成1个零
if(floatPart != "00"){
re = /零+元/ig;
resultStr = resultStr.replace(re,"零"); //“元”前面N个零都替换成“元”
resultStr += digitalCn[parseInt(floatPart.substr(0,1))] + "角";
resultStr += digitalCn[parseInt(floatPart.substr(1,1))] + "分";
}else{
re = /零+元/ig;
resultStr = resultStr.replace(re,"元"); //“元”前面N个零都替换成“元”
resultStr += "整";
}
return "人民币:"+resultStr;
}
function change() {
var str = document.getElementById("txt").value;
alert(getUppercase(str));
}
</script>
</head><body>
<input type="text" id="txt" maxlength="8"/><input type="button" value="转换" onClick="change();"/>
</body>
</html>
<!--
/*作者:梅雪香 Meixx (code by meixx 2006-2-15)
*功能:把16位以内整数转换成大写中文
*使用方法: num.parseCN()
*问题:当数值大于9999,9999,9999,9990的时候显示不准确,为9999,9999,9999,9999时,提示错误.
*/
Number.prototype.parseCN = function(){
//参数检查
if(/\./g.test(this.toString()) || Math.abs(this).toString().length >16 )
throw new Error(-1,"Number.parseCN()的参数非法!");
var strResult = this<0?"负":"";
var str = Math.abs(this).toString();
var numArr = new Array();
var len = str.length;
for(var i=0,j=len/4;i<j;i++)
numArr.push(str.substring(len-4*(i+1),len-4*i));
for(var i=numArr.length-1;i>=0;i--)
strResult += (/^0{4}$/.test(numArr[i])?"":(numArr[i].read() +("万亿兆".charAt(i-1)?"万亿兆".charAt(i-1):"")));
return strResult;
}
String.prototype.read = function(){
var strRtn = "";
var len = this.length;
var isZeroPre = false;
var isNonZeroAppear = false;
for(var i=len-1;i>=0;i--){
if(this.charAt(i) != "0"){
var ch = "拾佰仟".charAt(len-2-i);
strRtn = "零壹贰叁肆伍陆柒捌玖".charAt(this.charAt(i)) + (ch?ch:"") + (isZeroPre?"零":"") + strRtn;
isNonZeroAppear = true;
isZeroPre = false;
}
else{
isZeroPre = isNonZeroAppear;
if(i == 0 ) strRtn = "零" + strRtn;
}
}
return strRtn;
}
var time1 = new Date();
for(var i=14000;i<15000;i++)
document.write(i.parseCN() + "<br>");
var time2 = new Date();
//alert(time2.valueOf() - time1.valueOf());
document.write(time2.valueOf() - time1.valueOf() + "毫秒");
//-->
</script>以前写的,没有测出错误,不过效率不是最高的,也有长度限制.