关于播报钱数的问题。500分求助,分不够再加。 本帖最后由 pansy5 于 2010-12-09 10:09:38 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主的是vbscript程序不过代码太长,看不下去 好恶心的 switch case,呵呵英文中金额的阅读方式与中文不同,原来的代码似乎是针对英文设计的,如果需要中文方式的金额阅读,就需要认真分析,而不是匆忙滴修改代码! 问问楼主 这样的 switch case怎么改的好看些我也觉得恶心但是每次写都只能这么写 找不出什么好方式 <script>function chineseNumber(num){if (isNaN(num) || num > Math.pow(10, 12)) return "";var cn = "零壹贰叁肆伍陆柒捌玖"var unit = new Array("拾佰仟", "分角")var unit1= new Array("万亿", "")var numArray = num.toString().split(".")var start = new Array(numArray[0].length-1, 2)function toChinese(num, index){var num = num.replace(/\d/g, function ($1){return cn.charAt($1)+unit[index].charAt(start--%4 ? start%4 : -1)})return num}for (var i=0; i<numArray.length; i++){var tmp = ""for (var j=0; j*4<numArray[i].length; j++){var strIndex = numArray[i].length-(j+1)*4var str = numArray[i].substring(strIndex, strIndex+4)var start = i ? 2 : str.length-1var tmp1 = toChinese(str, i)tmp1 = tmp1.replace(/(零.)+/g, "零").replace(/零+$/, "")tmp1 = tmp1.replace(/^壹拾/, "拾")tmp = (tmp1+unit1[i].charAt(j-1)) + tmp}numArray[i] = tmp }numArray[1] = numArray[1] ? numArray[1] : ""numArray[0] = numArray[0] ? numArray[0]+"圆" : numArray[0], numArray[1] = numArray[1].replace(/^零+/, "")numArray[1] = numArray[1].match(/分/) ? numArray[1] : numArray[1]+"整"return numArray[0]+numArray[1]}function aNumber(num){var numArray = new Array()var unit = "亿万圆$"for (var i=0; i<unit.length; i++){var re = eval("/"+ (numArray[i-1] ? unit.charAt(i-1) : "") +"(.*)"+unit.charAt(i)+"/")if (num.match(re)){numArray[i] = num.match(re)[1].replace(/^拾/, "壹拾")numArray[i] = numArray[i].replace(/[零壹贰叁肆伍陆柒捌玖]/g, function ($1){return "零壹贰叁肆伍陆柒捌玖".indexOf($1)})numArray[i] = numArray[i].replace(/[分角拾佰仟]/g, function ($1){return "*"+Math.pow(10, "分角 拾佰仟 ".indexOf($1)-2)+"+"}).replace(/^\*|\+$/g, "").replace(/整/, "0")numArray[i] = "(" + numArray[i] + ")*"+Math.ceil(Math.pow(10, (2-i)*4))}else numArray[i] = 0}return eval(numArray.join("+"))}</script><!--onkeypress="regInput(event,/^\d{0,12} (\. \d{0,2})?$/)"--><input id=up size=60 ><button onclick="lw.value = chineseNumber(up.value)">转为大写</button><br><input id=lw size=60 value="壹仟壹佰壹拾壹圆整"><button onclick="up.value = aNumber(lw.value)">转为小写</button> 不好意思,昨天临时有事没写完,今天补上,几乎完成了,lz 须要自己重新录音,代码简单修改就可以用了L@_@K<!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> <title>ParseChineseFigureAmountStringIntoChineseWords</title> <meta name="generator" content="editplus" /> <meta name="author" content="" /> <meta name="keywords" content="" /> <meta name="description" content="" /> </head> <body> <script type="text/javascript"> <!--String.Empty = "";String.prototype.Trim = function() { return this.replace(/(^\s+)|(\s+$)/g, String.Empty);};String.prototype.TrimChar = function(trimedChar) { var reg = new RegExp("(^" + trimedChar + "+)|(" + trimedChar + "+$)", "g"); return this.replace(reg, String.Empty);};String.prototype.RightTrimChar = function(trimedChar) { var reg = new RegExp(trimedChar + "+$", "g"); return this.replace(reg, String.Empty);};String.prototype.LeftTrimChar = function(trimedChar) { var reg = new RegExp("^" + trimedChar + "+", "g"); return this.replace(reg, String.Empty);};String.prototype.IsEndWith = function(endString) { var reg = new RegExp(endString + "+$", "g"); return reg.test(this);};function ParseAmountStringIntoChineseWords(amountString){ var figureString = GetFigureStringFromAmountString(amountString); if (figureString == null) throw new Error("输入金额文本格式非法!"); // head.tail var figureParts = figureString.split("."); var headPart = figureParts[0]; var tailPart = null; if (figureParts.length > 1) tailPart = figureParts[1]; var headString = GetHeadStringByHeadPart(headPart); var tailString = GetTailStringByTailPart(tailPart); return JoinHeadStringAndTailString(headString, tailString);}function JoinHeadStringAndTailString(headString, tailString){ var result = String.Empty; if (headString != String.Empty && tailString == String.Empty) result = headString + "整"; else if (headString == String.Empty && tailString != String.Empty) result = tailString.LeftTrimChar('零'); else result = headString + tailString; return result;}function GetFigureStringFromAmountString(amountString){ amountString = amountString.Trim(); var amountReg = /^¥(\d+(\.(\d+))?)/; if (amountReg.test(amountString)) return amountString.match(amountReg)[1].Trim(); else return null;}function GetHeadStringByHeadPart(headPart){ var headFullUnits = ["元","拾","百","千","万","拾","百","千","亿","拾","百","千","万"]; var yuanUnit = headFullUnits[0]; var headString = ParseFigureStringIntoChineseWords(headPart, headFullUnits); headString = headString.TrimChar('零'); if (headString != String.Empty && !headString.IsEndWith(yuanUnit)) headString += yuanUnit; return headString;}function GetTailStringByTailPart(tailPart){ var tailFullUnits = ["分","角"]; var tailString = ParseFigureStringIntoChineseWords(tailPart, tailFullUnits); tailString = tailString.RightTrimChar('零'); return tailString;}function ParseFigureStringIntoChineseWords(figureString, unitArray){ var chineseWords = String.Empty; if (figureString != null && figureString != String.Empty) { var usedUnits = GetMatchingUnitsOfFigures(unitArray, figureString); var chineseNumbers = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"]; var figures = figureString.split(String.Empty); for (var i=0; i<figures.length; i++) { chineseWords += chineseNumbers[parseInt(figures[i])]; if (figures[i] != "0") chineseWords += usedUnits[i]; } chineseWords = ReplaceMultipleChineseZeroWordsWithSingle(chineseWords); } return chineseWords;}function GetMatchingUnitsOfFigures(unitArray, figureString){ return unitArray.slice(0, figureString.length).reverse();}function ReplaceMultipleChineseZeroWordsWithSingle(chineseWords){ return chineseWords.replace(/零{2,}/g, "零");}// -----------------------------------------------// Test// -----------------------------------------------function TestAndShowOutput(amountString){ var Sounder = {}; Sounder["零"] = "0.wav"; Sounder["壹"] = "1.wav"; Sounder["贰"] = "2.wav"; Sounder["叁"] = "3.wav"; Sounder["肆"] = "4.wav"; Sounder["伍"] = "5.wav"; Sounder["陆"] = "6.wav"; Sounder["柒"] = "7.wav"; Sounder["捌"] = "8.wav"; Sounder["玖"] = "9.wav"; Sounder["分"] = "fen.wav"; Sounder["角"] = "jiao.wav"; Sounder["元"] = "yuan.wav"; Sounder["整"] = "zheng.wav"; Sounder["拾"] = "shi.wav"; Sounder["百"] = "bai.wav"; Sounder["千"] = "qian.wav"; Sounder["万"] = "wan.wav"; Sounder["亿"] = "yi.wav"; document.write(amountString, ": "); var chineseWords = ParseAmountStringIntoChineseWords(amountString); document.write(chineseWords); if (chineseWords != String.Empty) { var speeches = chineseWords.split(String.Empty); for (var i=0; i<speeches.length; i++) speeches[i] = Sounder[speeches[i]]; document.write("; Pronounce: ", speeches.join("-")); } document.write("<br />");}TestAndShowOutput("¥10203");TestAndShowOutput("¥10200");TestAndShowOutput("¥10003");TestAndShowOutput("¥10000");TestAndShowOutput("¥0.40");TestAndShowOutput("¥0.45");TestAndShowOutput("¥0.05");TestAndShowOutput("¥10203.40");TestAndShowOutput("¥10200.40");TestAndShowOutput("¥10203.00");TestAndShowOutput("¥0.00");/*¥10203: 壹万零贰百零叁元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-zheng.wav¥10200: 壹万零贰百元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-yuan.wav-zheng.wav¥10003: 壹万零叁元整; Pronounce: 1.wav-wan.wav-0.wav-3.wav-yuan.wav-zheng.wav¥10000: 壹万元整; Pronounce: 1.wav-wan.wav-yuan.wav-zheng.wav¥0.40: 肆角; Pronounce: 4.wav-jiao.wav¥0.45: 肆角伍分; Pronounce: 4.wav-jiao.wav-5.wav-fen.wav¥0.05: 伍分; Pronounce: 5.wav-fen.wav¥10203.40: 壹万零贰百零叁元肆角; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-4.wav-jiao.wav¥10200.40: 壹万零贰百元肆角; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-yuan.wav-4.wav-jiao.wav¥10203.00: 壹万零贰百零叁元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-zheng.wav¥0.00: */ //--> </script> </body></html> html实现页面传值 删除href包含特定网址的a标签 有关JS循环的问题? 哪位做过web客户端串口编程 关于鼠标选中文字的问题。 如何在页面跳转时清除cookie 请教一个小正则的问题,一直搞不太明白。。。。 【求助】页面位置怎么跳到生成的html位置 請問如何實現類似VBScript中的Trim功能﹖ 高手请进,小问题(50分) 火狐兼容选项卡问题 js怎么获取onclick(id)中id. 要有兼容性的。
如果需要中文方式的金额阅读,就需要认真分析,而不是匆忙滴修改代码!
问问楼主 这样的 switch case怎么改的好看些
我也觉得恶心
但是每次写都只能这么写 找不出什么好方式
{
if (isNaN(num) || num > Math.pow(10, 12))
return "";
var cn = "零壹贰叁肆伍陆柒捌玖"
var unit = new Array("拾佰仟", "分角")
var unit1= new Array("万亿", "")
var numArray = num.toString().split(".")
var start = new Array(numArray[0].length-1, 2)function toChinese(num, index)
{
var num = num.replace(/\d/g, function ($1)
{
return cn.charAt($1)+unit[index].charAt(start--%4 ? start%4 : -1)
})
return num
}for (var i=0; i<numArray.length; i++)
{
var tmp = ""
for (var j=0; j*4<numArray[i].length; j++)
{
var strIndex = numArray[i].length-(j+1)*4
var str = numArray[i].substring(strIndex, strIndex+4)
var start = i ? 2 : str.length-1
var tmp1 = toChinese(str, i)
tmp1 = tmp1.replace(/(零.)+/g, "零").replace(/零+$/, "")
tmp1 = tmp1.replace(/^壹拾/, "拾")
tmp = (tmp1+unit1[i].charAt(j-1)) + tmp
}
numArray[i] = tmp
}numArray[1] = numArray[1] ? numArray[1] : ""
numArray[0] = numArray[0] ? numArray[0]+"圆" : numArray[0], numArray[1] = numArray[1].replace(/^零+/, "")
numArray[1] = numArray[1].match(/分/) ? numArray[1] : numArray[1]+"整"
return numArray[0]+numArray[1]
}function aNumber(num)
{
var numArray = new Array()
var unit = "亿万圆$"
for (var i=0; i<unit.length; i++)
{
var re = eval("/"+ (numArray[i-1] ? unit.charAt(i-1) : "") +"(.*)"+unit.charAt(i)+"/")
if (num.match(re))
{
numArray[i] = num.match(re)[1].replace(/^拾/, "壹拾")
numArray[i] = numArray[i].replace(/[零壹贰叁肆伍陆柒捌玖]/g, function ($1)
{
return "零壹贰叁肆伍陆柒捌玖".indexOf($1)
})
numArray[i] = numArray[i].replace(/[分角拾佰仟]/g, function ($1)
{
return "*"+Math.pow(10, "分角 拾佰仟 ".indexOf($1)-2)+"+"
}).replace(/^\*|\+$/g, "").replace(/整/, "0")
numArray[i] = "(" + numArray[i] + ")*"+Math.ceil(Math.pow(10, (2-i)*4))
}
else numArray[i] = 0
}
return eval(numArray.join("+"))
}
</script>
<!--onkeypress="regInput(event,/^\d{0,12} (\. \d{0,2})?$/)"-->
<input id=up size=60 ><button onclick="lw.value = chineseNumber(up.value)">转为大写</button><br>
<input id=lw size=60 value="壹仟壹佰壹拾壹圆整"><button onclick="up.value = aNumber(lw.value)">转为小写</button>
lz 须要自己重新录音,代码简单修改就可以用了L@_@K<!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>
<title>ParseChineseFigureAmountStringIntoChineseWords</title>
<meta name="generator" content="editplus" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head> <body>
<script type="text/javascript">
<!--
String.Empty = "";
String.prototype.Trim = function() {
return this.replace(/(^\s+)|(\s+$)/g, String.Empty);
};String.prototype.TrimChar = function(trimedChar) {
var reg = new RegExp("(^" + trimedChar + "+)|(" + trimedChar + "+$)", "g");
return this.replace(reg, String.Empty);
};
String.prototype.RightTrimChar = function(trimedChar) {
var reg = new RegExp(trimedChar + "+$", "g");
return this.replace(reg, String.Empty);
};
String.prototype.LeftTrimChar = function(trimedChar) {
var reg = new RegExp("^" + trimedChar + "+", "g");
return this.replace(reg, String.Empty);
};String.prototype.IsEndWith = function(endString) {
var reg = new RegExp(endString + "+$", "g");
return reg.test(this);
};function ParseAmountStringIntoChineseWords(amountString)
{
var figureString = GetFigureStringFromAmountString(amountString); if (figureString == null)
throw new Error("输入金额文本格式非法!"); // head.tail
var figureParts = figureString.split(".");
var headPart = figureParts[0];
var tailPart = null;
if (figureParts.length > 1)
tailPart = figureParts[1]; var headString = GetHeadStringByHeadPart(headPart);
var tailString = GetTailStringByTailPart(tailPart); return JoinHeadStringAndTailString(headString, tailString);
}function JoinHeadStringAndTailString(headString, tailString)
{
var result = String.Empty; if (headString != String.Empty
&& tailString == String.Empty)
result = headString + "整";
else if (headString == String.Empty
&& tailString != String.Empty)
result = tailString.LeftTrimChar('零');
else
result = headString + tailString;
return result;
}
function GetFigureStringFromAmountString(amountString)
{
amountString = amountString.Trim();
var amountReg = /^¥(\d+(\.(\d+))?)/; if (amountReg.test(amountString))
return amountString.match(amountReg)[1].Trim();
else
return null;
}function GetHeadStringByHeadPart(headPart)
{
var headFullUnits = ["元","拾","百","千","万","拾","百","千","亿","拾","百","千","万"];
var yuanUnit = headFullUnits[0];
var headString = ParseFigureStringIntoChineseWords(headPart, headFullUnits); headString = headString.TrimChar('零'); if (headString != String.Empty
&& !headString.IsEndWith(yuanUnit))
headString += yuanUnit; return headString;
}function GetTailStringByTailPart(tailPart)
{
var tailFullUnits = ["分","角"];
var tailString = ParseFigureStringIntoChineseWords(tailPart, tailFullUnits); tailString = tailString.RightTrimChar('零'); return tailString;
}function ParseFigureStringIntoChineseWords(figureString, unitArray)
{
var chineseWords = String.Empty; if (figureString != null && figureString != String.Empty)
{
var usedUnits = GetMatchingUnitsOfFigures(unitArray, figureString); var chineseNumbers = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
var figures = figureString.split(String.Empty); for (var i=0; i<figures.length; i++)
{
chineseWords += chineseNumbers[parseInt(figures[i])]; if (figures[i] != "0")
chineseWords += usedUnits[i];
} chineseWords = ReplaceMultipleChineseZeroWordsWithSingle(chineseWords);
} return chineseWords;
}function GetMatchingUnitsOfFigures(unitArray, figureString)
{
return unitArray.slice(0, figureString.length).reverse();
}
function ReplaceMultipleChineseZeroWordsWithSingle(chineseWords)
{
return chineseWords.replace(/零{2,}/g, "零");
}
// -----------------------------------------------
// Test
// -----------------------------------------------function TestAndShowOutput(amountString)
{
var Sounder = {};
Sounder["零"] = "0.wav";
Sounder["壹"] = "1.wav";
Sounder["贰"] = "2.wav";
Sounder["叁"] = "3.wav";
Sounder["肆"] = "4.wav";
Sounder["伍"] = "5.wav";
Sounder["陆"] = "6.wav";
Sounder["柒"] = "7.wav";
Sounder["捌"] = "8.wav";
Sounder["玖"] = "9.wav"; Sounder["分"] = "fen.wav";
Sounder["角"] = "jiao.wav";
Sounder["元"] = "yuan.wav";
Sounder["整"] = "zheng.wav";
Sounder["拾"] = "shi.wav";
Sounder["百"] = "bai.wav";
Sounder["千"] = "qian.wav";
Sounder["万"] = "wan.wav";
Sounder["亿"] = "yi.wav"; document.write(amountString, ": ");
var chineseWords = ParseAmountStringIntoChineseWords(amountString);
document.write(chineseWords); if (chineseWords != String.Empty)
{
var speeches = chineseWords.split(String.Empty);
for (var i=0; i<speeches.length; i++)
speeches[i] = Sounder[speeches[i]];
document.write("; Pronounce: ", speeches.join("-"));
}
document.write("<br />");
}
TestAndShowOutput("¥10203");
TestAndShowOutput("¥10200");
TestAndShowOutput("¥10003");
TestAndShowOutput("¥10000");
TestAndShowOutput("¥0.40");
TestAndShowOutput("¥0.45");
TestAndShowOutput("¥0.05");
TestAndShowOutput("¥10203.40");
TestAndShowOutput("¥10200.40");
TestAndShowOutput("¥10203.00");
TestAndShowOutput("¥0.00");/*
¥10203: 壹万零贰百零叁元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-zheng.wav
¥10200: 壹万零贰百元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-yuan.wav-zheng.wav
¥10003: 壹万零叁元整; Pronounce: 1.wav-wan.wav-0.wav-3.wav-yuan.wav-zheng.wav
¥10000: 壹万元整; Pronounce: 1.wav-wan.wav-yuan.wav-zheng.wav
¥0.40: 肆角; Pronounce: 4.wav-jiao.wav
¥0.45: 肆角伍分; Pronounce: 4.wav-jiao.wav-5.wav-fen.wav
¥0.05: 伍分; Pronounce: 5.wav-fen.wav
¥10203.40: 壹万零贰百零叁元肆角; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-4.wav-jiao.wav
¥10200.40: 壹万零贰百元肆角; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-yuan.wav-4.wav-jiao.wav
¥10203.00: 壹万零贰百零叁元整; Pronounce: 1.wav-wan.wav-0.wav-2.wav-bai.wav-0.wav-3.wav-yuan.wav-zheng.wav
¥0.00:
*/
//-->
</script>
</body>
</html>