我正在尝试将数字转换为英文单词,例如1234将变为:“一千二三十四”。
我的战术是这样的:
将数字分成三个,并将它们
finlOutPut从右到左放在数组 ( ) 上。将
finlOutPut三位数的每组(数组中的每个单元格)转换为一个单词(这就是triConvert函数所做的)。如果所有三个数字都为零,则将它们转换为"dontAddBigSuffix"从右到左,加上千、百万、十亿等。如果
finlOutPut单元格等于"dontAddBigSufix"(因为它只是零),则不要添加单词并将单元格设置为" "(无)。
它似乎工作得很好,但是我遇到了一些问题,例如 19000000 9转换为:“一亿九千万”。当有几个零时,它会以某种方式“忘记”最后一个数字。
我做错了什么?错误在哪里?为什么它不能完美地工作?
<html>
<头>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<script type="text/javascript">
函数更新(){
var bigNumArry = new Array('', '千', '百万', '十亿', '万亿', 'quadrillion', 'quintillion');
var 输出 = '';
var numString = document.getElementById('number').value;
var finlOutPut = new Array();
if (numString == '0') {
document.getElementById('container').innerHTML = '零';
返回;
}
如果(数字字符串 == 0){
document.getElementById('container').innerHTML = 'messeg 告诉输入数字';
返回;
}
var i = numString.length;
i = i - 1;
//将数字切成三位数的组并将它们添加到Arry
而 (numString.length > 3) {
var triDig = new Array(3);
triDig[2] = numString.charAt(numString.length - 1);
triDig[1] = numString.charAt(numString.length - 2);
triDig[0] = numString.charAt(numString.length - 3);
var varToAdd = triDig[0] + triDig[1] + triDig[2];
finlOutPut.push(varToAdd);
一世 - ;
numString = numString.substring(0, numString.length - 3);
}
finlOutPut.push(numString);
finlOutPut.reverse();
//将每组三位数转换成英文单词
//如果所有数字都为零,则triConvert
//函数返回字符串“dontAddBigSufix”
for (j = 0; j < finlOutPut.length; j++) {
finlOutPut[j] = triConvert(parseInt(finlOutPut[j]));
}
var bigScalCntr = 0; //这个int标志着百万亿万亿... Arry
for (b = finlOutPut.length - 1; b >= 0; b--) {
如果 (finlOutPut[b] != "dontAddBigSufix") {
finlOutPut[b] = finlOutPut[b] + bigNumArry[bigScalCntr] + ', ';
bigScalCntr++;
}
别的 {
//将 finlOP[b] 处的字符串从 "dontAddBigSufix" 替换为空字符串。
finlOutPut[b] = ' ';
bigScalCntr++; //推进计数器
}
}
//将输出的Arry转换为,更可打印的字符串
for(n = 0; n<finlOutPut.length; n++){
输出 +=finlOutPut[n];
}
document.getElementById('container').innerHTML = output;//打印输出
}
//从1到999的数字转换单词的简单函数
函数 triConvert(num){
var one = new Array('', ' one', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九');
var tens = new Array('', '', '二十', '三十', '四十', '五十', '六十', '七十', '八十', '九十');
var 百 = '百';
var 输出 = '';
var numString = num.toString();
如果(数量== 0){
返回 'dontAddBigSufix';
}
// 10, 11, 12 ,13, .... 19 的情况
如果(数量 < 20){
输出 = 个[数量];
返回输出;
}
//100个以上
如果(numString.length == 3){
output = ones[parseInt(numString.charAt(0))] + 百;
输出 += tens[parseInt(numString.charAt(1))];
输出 +=ones[parseInt(numString.charAt(2))];
返回输出;
}
输出 += tens[parseInt(numString.charAt(0))];
输出 +=ones[parseInt(numString.charAt(1))];
返回输出;
}
</脚本>
</头>
<身体>
<输入类型="文本"
身份证=“号码”
大小=“70”
onkeyup="更新();"
/*这段代码防止非数字字母*/
onkeydown="return (event.ctrlKey || event.altKey
|| (47<event.keyCode && event.keyCode<58 && event.shiftKey==false)
|| (95<event.keyCode && event.keyCode<106)
|| (event.keyCode==8) || (事件.keyCode==9)
|| (event.keyCode>34 && event.keyCode<40)
|| (event.keyCode==46))"/>
<br/>
<div id="container">这里是打印的数字</div>
</正文>
</html>