一个金额小写转大写的函数,求教如何显示?

wohuifude123 2013-03-18 07:21:43
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language=javascript>
<!--
function Arabia_to_Chinese(number)
{
var i = 0;
var Mum = number;
for(i=Num.length-1;i>=0;i--)
{
Num = Num.replace(",","")//替换tomoney()中的“,”
Num = Num.replace(" ","")//替换tomoney()中的空格
}
Num = Num.replace("¥","")//替换掉可能出现的¥字符
if(isNaN(Num))
{//验证输入的字符是否为数字
alert("请检查小写金额是否正确");
return;
}
//---字符处理完毕,开始转换,转换采用前后两部分分别转换---//
var part = String(Num).split(".");
var newchar = "";
//小数点前进行转化
for(i=part[0].length-1;i>=0;i--)
{
if(part[0].length > 10)
{
alert("位数过大,无法计算");return "";
}//若数量超过拾亿单位,提示
var tmpnewchar = ""
var perchar = part[0].charAt(i);
switch(perchar)
{
case "0":
tmpnewchar="零" + tmpnewchar;
return document.write(tmpnewchar);
break;
case "1":
tmpnewchar="壹" + tmpnewchar;
return tmpnewchar;
case "2":
tmpnewchar="贰" + tmpnewchar;
return tmpnewchar;
}
}
}
-->
</script>
</head>
<body>

<script language="javascript">
Arabia_to_Chinese(0);
</script>
</body>
</html>

测试什么都没显示,求指教哪里写错了?
...全文
284 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wohuifude123 2013-03-19
  • 打赏
  • 举报
回复
谢谢楼上各位
functionsub 2013-03-19
  • 打赏
  • 举报
回复
哈,没仔细看代码。。 0的时候有document.write了。。 仔细看了下代码。 首先第11行,Mum应该是笔误,应该是Num 其次Num是数字不是字符串,没有replace方法,要转换一下,Num = number+'',或者像楼上的number.toString()
functionsub 2013-03-19
  • 打赏
  • 举报
回复
你只是 return了,并没有显示出来啊。。。 等于你考试在草纸上算了半天没写到考卷上一样。。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language=javascript> 
<!-- 
function Arabia_to_Chinese(number)
{
    var i = 0;
    var Mum = number;
    for(i=Num.length-1;i>=0;i--)
    {
        Num = Num.replace(",","")//替换tomoney()中的“,”
        Num = Num.replace(" ","")//替换tomoney()中的空格
    }
    Num = Num.replace("¥","")//替换掉可能出现的¥字符
    if(isNaN(Num))
    {//验证输入的字符是否为数字
        alert("请检查小写金额是否正确");
        return;
    }
   //---字符处理完毕,开始转换,转换采用前后两部分分别转换---//
   var part = String(Num).split(".");
   var newchar = ""; 
   //小数点前进行转化
    for(i=part[0].length-1;i>=0;i--)
    {
        if(part[0].length > 10)
        {
            alert("位数过大,无法计算");return "";
        }//若数量超过拾亿单位,提示
        var tmpnewchar = ""
        var perchar = part[0].charAt(i);
        switch(perchar)
        {
            case "0":
                tmpnewchar="零" + tmpnewchar;
                return document.write(tmpnewchar);
                break;
            case "1":
                tmpnewchar="壹" + tmpnewchar;
                return tmpnewchar;
            case "2":
                tmpnewchar="贰" + tmpnewchar;
                return tmpnewchar;
        }
    }
}
--> 
</script> 
</head>
<body>
 <div id="result"></div>
<script language="javascript">
document.getElementById('result').innerHTML = Arabia_to_Chinese(0);
</script>
</body>
</html>
scscms太阳光 2013-03-19
  • 打赏
  • 举报
回复
    function parseChinese(n) {
        var c = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
        var p = ["分","角","元","拾","百","千","万","拾","百","千","亿","拾","百","千"];
        var temp = (/^(0|[1-9])\d*(\.\d+)?$/).test(n)? n : null;
        var i = -1,result = null;
        if(temp) {
            temp = parseFloat(temp).toFixed(2);
            i = (/\.\d+$/).test(temp)? -1 : 1;
            result = temp.toString().replace(/\./g, "").split("").reverse().join("").replace(/\d/g, function(a) {i++; return p[i] + c[a]}).split("").reverse().join("").replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/(千|百|拾)零(元|万|亿)/g,"$1$2").replace(/(亿零)万/g, "$1").replace(/(万零)元/g, "$1").replace(/(零)+/g, "零").replace(/(亿)零(元)/g, "$1$2").replace(/(零角)*零分$/g, "整");
        }
        return result;
    }
    alert(parseChinese(1234567.89));
Kilin_Zhang 2013-03-19
  • 打赏
  • 举报
回复
写一个比较狂野的。

(function(){
	var money = window.money = function (m) {
		this._orgMoney = m;
	}
	money.prototype = {
		//验证是否为合法的money
		checkInvalidMoney: function () {
			var m = this._orgMoney;
			if (m == null
				|| m === undefined) {
				return false;
			}
			//parseFloat().toString();
			m = m.toString();
			m = m.replace(/[^\-\.\d]/g, "");
			return !isNaN(m);
		},
		//将money转换为标准的decimal数据
		toDecimal: function () {
			if (this.checkInvalidMoney()) {
			    var m = this._orgMoney.toString();
				m = m.replace(/[^\-\.\d]/g, "");
				return parseFloat(m);
			}
			return 0;
		},
		//将money转换为人民币大写形式
		toUpperRMB: function () {
			var m = this.toDecimal();
			if (!this.checkInvalidMoney()) {
				return "";
			}
			m = m.toString();
			return toUpperRMB(m);
		}
	};

	var DXSZ = "零壹贰叁肆伍陆柒捌玖",
		DXDW = "毫厘分角元拾佰仟萬拾佰仟亿拾佰仟萬兆拾佰仟萬亿京拾佰仟萬亿兆垓",
		SCDW = "元拾佰仟萬亿京兆垓";

	//转换为人民币大写
	function toUpperRMB(money) {
	    var result = "",//转化后的结果
			m = money,
			isNegative = /^\-/.test(m),//是否是负数
			isFloat = /\./.test(m);//是否是小数;
	    m = m.replace(/^\-/, "");//去掉负号,将数据变为正数
	    var arr = m.split('.');
		var integer = arr[0];//整数部分
		result = toUpperInteger(integer);
		if (isFloat) {
			result += toUpperFloat(arr[1], parseInt(integer) != 0 ? true : false);
		} else {
			if (result == "") {
				result = "零元";
			}
			result += "整";
		}
		if (isNegative) {
			result = "负" + result;
		}
		return result;
	}
	//将整数部分转为人民币大写
	function toUpperInteger(integer) {
		var v = integer,
			m = parseInt(v);
		if (m == 0) {
			return "";
		}
		var currCap = "",    //当前金额
			capResult = "",  //结果金额
			currentUnit = "",//当前单位
			resultUnit = "", //结果单位           
			prevChar = -1,      //上一位的值
			currChar = 0,       //当前位的值
			posIndex = 4;       //位置索引,从"元"开始
		for (var i = v.length - 1; i >= 0; i--) {
			currChar = parseInt(v.substr(i, 1));
			if (posIndex > 30)
			{
				//已超出最大精度"垓"。注:可以将30改成22,使之精确到兆亿就足够了
				break;
			}
			else if (currChar != 0) {
				currCap = DXSZ.substr(currChar, 1) + DXDW.substr(posIndex, 1);
			} else {
				//防止转换后出现多余的零,例如:3000020
				switch (posIndex) {
					case 4: currCap = "元"; break;
					case 8: currCap = "萬"; break;
					case 12: currCap = "亿"; break;
					case 17: currCap = "兆"; break;
					case 23: currCap = "京"; break;
					case 30: currCap = "垓"; break;
					default: break;
				}
				if (prevChar != 0) {
					if (currCap != "") {
					    if (currCap != "元") {
					        currCap += "零";
					    }
					}
					else {
						currCap = "零";
					}
				}
			}
			//对结果进行容错处理               
			if (capResult.Length > 0) {
				resultUnit = capResult.substr(0, 1);
				currentUnit = DXDW.substr(posIndex, 1);
				if (SCDW.indexOf(resultUnit) > 0) {
					if (SCDW.indexOf(currentUnit) > SCDW.indexOf(resultUnit)) {
						capResult = capResult.substr(1);
					}
				}
			}
			capResult = currCap + capResult;
			prevChar = currChar;
			posIndex += 1;
			currCap = "";
		}
		return capResult;
	}
	//将小数部分转为人民币大写
	function toUpperFloat(value,addZero) {
		var v = value,
			m = parseInt(value);
		if (m == 0) {
			return "";
		}
		var currCap = "",
			capResult = "",
			prevChar = addZero ? -1 : 0,
			currChar = 0,
			posIndex = 3;
		for (var i = 0; i < v.length; i++) {
			currChar = parseInt(v.substr(i, 1));
			if (currChar != 0) {
				currCap = DXSZ.substr(currChar, 1) + DXDW.substr(posIndex, 1);
			} else {
				if (parseInt(v.substr(i)) == 0) {
					break;
				} else if (prevChar != 0) {
					currCap = "零";
				}
			}
			capResult += currCap;
			prevChar = currChar;
			posIndex -= 1;
			currCap = "";
		}
		return capResult;
	}

})();

var s = "-12,124.56";
		var m = new money(s);
		document.writeln(m.toUpperRMB());
Go 旅城通票 2013-03-18
  • 打赏
  • 举报
回复
//var Mum = number;
var Num = number.toString();//变量名称错了并且要转为string

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧