我必须将数字转换为单词。问题是数组只返回第一个嵌套的结果,如果我在其他嵌套中使用它们返回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);
}
答案 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)来向下舍入到最小的整数
希望它有所帮助 丹