So i am building a calculator. I am trying to get the decimals to display on screen. That is not the problem. After i click the decimal button; and then a random number button, the zero to the right of the decimal point disappears. I believe this is happening because i am using the replace method to get rid of the zero in the numbers function. This is a very simple implementation that i feel like i should already know. I wanted to know if anybody had any ideas?
JavaScript
x
45
45
1
<!DOCTYPE html>
2
3
<html>
4
5
<head>
6
<meta charset="utf-8">
7
<meta http-equiv="X-UA-Compatible" content="IE=edge">
8
<title>Calculator</title>
9
<meta name="description" content="">
10
<meta name="viewport" content="width=device-width, initial-scale=1">
11
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"
12
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
13
<link rel="stylesheet" href="style.css">
14
</head>
15
16
<body>
17
<h1>My Calculator</h1>
18
<br>
19
20
<div class="container calculator">
21
<div class="screen_display">0</div>
22
<button class="calcbutton operator" id="+">+</button>
23
<button class="calcbutton operator" id="-">-</button>
24
<button class="calcbutton operator" id="+">÷</button>
25
<button class="calcbutton operator" id="x">x</button>
26
<button class="calcbutton number" id="7" value="7">7</button>
27
<button class="calcbutton number" id="8" value="8">8</button>
28
<button class="calcbutton number" id="9" value="9">9</button>
29
<button class="calcbutton number" id="4" value="4">4</button>
30
<button class="calcbutton number" id="5" value="5">5</button>
31
<button class="calcbutton number" id="6" value="6">6</button>
32
<button class="calcbutton number" id="1" value="1">1</button>
33
<button class="calcbutton number" id="2" value="2">2</button>
34
<button class="calcbutton number" id="3" value="3">3</button>
35
<button class="calcbutton number" id="0" value="0">0</button>
36
<button class="calcbutton decimal" id="." value='.'>.</button>
37
<button class="calcbutton others" id="clear">AC</button>
38
<button class="calcbutton other" id="equals">=</button>
39
</div>
40
41
<script src="index.js"></script>
42
</body>
43
44
</html>
45
JavaScript
1
36
36
1
const numberButton = document.querySelectorAll('.number'); //console.log(numbers)
2
const operatorButton = document.querySelectorAll('.operator');
3
const toolButton = document.querySelectorAll('.others');
4
const decimalButton = document.querySelector('.decimal');
5
const screenDisplay = document.querySelector('.screen_display')
6
7
let display, number, zero,
8
equal = false;
9
let valEntered = false;
10
11
numberButton.forEach(num => {
12
num.addEventListener("click", (e) => {
13
let str = screenDisplay.textContent
14
display = screenDisplay.textContent = str.replace(/^0+/, "");
15
if (valEntered) {
16
display = screenDisplay.textContent = e.target.value;
17
} else {
18
display = screenDisplay.textContent += e.target.value;
19
}
20
21
if (display.length > 16) {
22
alert("Thats as far as it goes");
23
}
24
})
25
});
26
27
28
decimalButton.addEventListener('click', (e) => {
29
let decimal = e.target.value;
30
zero = '0'
31
if (zero) {
32
display = screenDisplay.textContent += decimal
33
}
34
35
});
36
Advertisement
Answer
Try this below code. I have added an if condition, if (!str.includes("."))
which will now only replace 0, if there is no decimal.
JavaScript
1
42
42
1
const numberButton = document.querySelectorAll(".number"); //console.log(numbers)
2
const operatorButton = document.querySelectorAll(".operator");
3
const toolButton = document.querySelectorAll(".others");
4
const decimalButton = document.querySelector(".decimal");
5
const screenDisplay = document.querySelector(".screen_display");
6
const clearButton = document.getElementById("clear");
7
8
let display,
9
number,
10
zero,
11
equal = false;
12
let valEntered = false;
13
14
numberButton.forEach((num) => {
15
num.addEventListener("click", (e) => {
16
let str = screenDisplay.textContent;
17
if (!str.includes("."))
18
display = screenDisplay.textContent = str.replace(/^0+/, "");
19
if (valEntered) {
20
display = screenDisplay.textContent = e.target.value;
21
} else {
22
display = screenDisplay.textContent += e.target.value;
23
}
24
25
if (display.length > 16) {
26
alert("Thats as far as it goes");
27
}
28
});
29
});
30
31
decimalButton.addEventListener("click", (e) => {
32
let decimal = e.target.value;
33
zero = "0";
34
if (zero) {
35
display = screenDisplay.textContent += decimal;
36
}
37
});
38
39
clearButton.addEventListener("click", (e) => {
40
screenDisplay.innerHTML = "0";
41
});
42