在JavaScript中嵌套ifs中使用数组未定义

时间:2015-06-01 15:32:07

标签: javascript html undefined

我必须将数字转换为单词。问题是数组只返回第一个嵌套的结果,如果我在其他嵌套中使用它们返回undefined。例如:

100 - 一百

101 - 未定义一百零一个

120 - 未定义的一百二十

121 - 未定义的百位和未定义的。

你能说出为什么会这样吗?

HTML:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Problem 8. Number as words.js"></script>
</head>
<body>
<p>number <input type="text" id="digit"></p>
<input type="button" id="button" value="Check">
<div id="output"></div>
</body>
</html>

JavaSript:

onload = function () {
var digit = document.getElementById('digit');
var button = document.getElementById('button');
var output = document.getElementById('output');
var units = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
var tenths = ['twenty', 'thirty', 'fourty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
var toTwenty = ['ten', 'eleven', ' twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];

function check() {
    var num = digit.value;
    if (num>=0 && num<10) {
        output.innerHTML = units[num];
    }
    else if (num>=10 && num<20){
        output.innerHTML = toTwenty[num%10];
    }
    else if (num>=20 && num<100) {
        if (num%10==0){
            output.innerHTML = tenths[num / 10 - 2];
        }
        else {
            output.innerHTML = tenths[num / 10 - 2] + ' ' + units[num % 10];
        }
    }
    else if(num>=100 && num<1000) {
        if (num%100==0) {
            output.innerHTML = units[num / 100] + ' hundred';
        }
        else if (num%100>0 && num%100<10) {
            output.innerHTML = units[num / 100] + ' hundred and ' + units[num %10];
        }
        else if (num%100>=10 && num%100<20) {
            output.innerHTML = units[num / 100] + ' hundred and ' + toTwenty[num % 10];
        }
        else if (num%10==0) {
            output.innerHTML = units[num / 100] + ' hundred and ' + tenths[(num % 100) / 10 - 2];
        }
        else {
            output.innerHTML = units[num / 100] + ' hundred and ' + tenths[(num % 100) / 10 - 2] + ' ' + units[num % 10];
        }
    }
}

button.addEventListener('click', check);
}

2 个答案:

答案 0 :(得分:1)

问题在于您使用数学。

你有一个数组units

['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
你正在使用的

units[num / 100]

但是,如果num是,例如107,那么107 / 100 = 1.07则没有 units中索引为1.07的元素。

您需要对数字进行舍入 - 向上或向下,我留给您 - Math.floor(num / 100);Math.ceil(num / 100);

答案 1 :(得分:1)

这里的问题是你正在使用&#34; num / 100&#34;和&#34; num / 10&#34;这给出了非整数结果 - &gt;你找不到阵列上的物品。

你应该使用Math.floor(num / 100)和Math.floor(num / 10)来向下舍入到最小的整数

希望它有所帮助 丹