I have written a program that is supposed to translate correctly from numbers to words.
But the problem is whenever I write something between 111 and 119 then showing One Hundred undefined One
i want it currect way.
also whenever I write 1001 then showing One Thousand Hundred One
and when I write something between 1011 and 1019 then showing One Thousand Hundred undefined One
I have given my code below
index.html
<!DOCTYPE html>
<html lang="en">
<link rel="stylesheet" href="style.css">
<body>
<main>
<form id="form">
<label for="cft">Enter Number</label>
<input type="number" id="num" name="num" />
<input type="text" id="text" name="text" />
</form>
</main>
<script src="script.js"></script>
</body>
</html>
script.js
const form = document.getElementById("form");
const num = document.getElementById("num");
const text = document.getElementById("text");
const ones = {
0: "",
1: "One",
2: "Two",
3: "Three",
4: "Four",
5: "Five",
6: "Six",
7: "Seven",
8: "Eight",
9: "Nine",
10: "Ten",
11: "Eleven",
12: "Twelve",
13: "Thirteen",
14: "Fourteen",
15: "Fifteen",
16: "Sixteen",
17: "Seventeen",
18: "Eighteen",
19: "Nineteen",
};
const prefixes = {
2: "Twenty",
3: "Thirty",
4: "Forty",
5: "Fifty",
6: "Sixty",
7: "Seventy",
8: "Eighty",
9: "Ninety",
};
num.addEventListener("input", function () {
const number = +num.value;
let words = "";
if (number >= 0 && number <= 19) {
words = ones[number];
} else if (number >= 20 && number <= 99) {
const tens = Math.floor(number / 10);
const onesPlace = number % 10;
words = prefixes[tens] + " " + ones[onesPlace];
} else if (number >= 100 && number <= 999) {
const hundreds = Math.floor(number / 100);
const tens = Math.floor((number % 100) / 10);
const onesPlace = number % 10;
if (tens === 0 && onesPlace === 0) {
words = ones[hundreds] + " Hundred";
} else if (tens === 0) {
words = ones[hundreds] + " Hundred " + ones[onesPlace];
} else if (onesPlace === 0) {
words = ones[hundreds] + " Hundred " + prefixes[tens];
} else {
words =
ones[hundreds] +
" Hundred " +
prefixes[tens] +
" " +
ones[onesPlace];
}
} else if (number >= 1000 && number <= 9999) {
const thousands = Math.floor(number / 1000);
const hundreds = Math.floor((number % 1000) / 100);
const tens = Math.floor((number % 100) / 10);
const onesPlace = number % 10;
if (tens === 0 && onesPlace === 0) {
words = ones[thousands] + " Thousand " + ones[hundreds] + " Hundred";
} else if (tens === 0) {
words =
ones[thousands] +
" Thousand " +
ones[hundreds] +
" Hundred " +
ones[onesPlace];
} else if (onesPlace === 0) {
words =
ones[thousands] +
" Thousand " +
ones[hundreds] +
" Hundred " +
prefixes[tens];
} else {
words =
ones[thousands] +
" Thousand " +
ones[hundreds] +
" Hundred " +
prefixes[tens] +
" " +
ones[onesPlace];
}
} else {
words = "Number out of range.";
}
text.value = words;
});
But the problem is whenever I write something between 111 and 119 then showing One Hundred undefined One
i want it currect way.
also whenever I write 1001 then showing One Thousand Hundred One
and when I write something between 1011 and 1019 then showing One Thousand Hundred undefined One
I want if write between 111 to 129 to show One Hundred Eleven
whenever I write 1001 then show One Thousand One
and when I write something between 1011 and 1019 then show One Thousand Eleven