-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
122 lines (112 loc) · 3.66 KB
/
script.js
File metadata and controls
122 lines (112 loc) · 3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const history = document.querySelector('.history');
const result = document.querySelector('.result');
const operators = document.querySelectorAll('.operator');
const numbers = document.querySelectorAll('.number');
function getHistory() {
return history.innerText;
}
function printHistory(num) {
history.innerText = num;
}
function getOutput() {
return result.innerText;
}
function printOutput(num) {
if (num == "")
result.innerText = '';
else
result.innerText = num;
}
function formattedString(num) {
// if (Number.isInteger(num))
// return parseInt(num).toLocaleString();
// else
return Number(num).toLocaleString();
}
function reverseFormattedString(num) {
return Number(num.replace(/,/g, ''));
}
function clearOutput() {
printOutput('');
}
for (let operator of operators) {
operator.addEventListener('click', (e) => {
switch (e.target.id) {
case 'C':
printOutput('');
printHistory('');
break;
case 'CE':
let n = reverseFormattedString(getOutput()); // we are sure the returned value if not an integer then NaN
// we can use the isNaN(value1, value2) or Object.is(value1, value2) to check for NaN or
// undefined types the second option is much better
if (isNaN(n)) {
let s = getHistory();
// console.log(s.slice(0, s.length - 1));
}
else {
let s = n.toString();
if (s.length == 1)
clearOutput();
else
printOutput(formattedString(s.slice(0, s.length - 1)));
}
break;
case '%':
printHistory(`${getOutput()}%`);
clearOutput();
break;
case '/':
printHistory(`${getOutput()}/`);
clearOutput();
break;
case 'x':
printHistory(`${getOutput()}*`);
clearOutput();
break;
case '-':
printHistory(`${getOutput()}-`);
clearOutput();
break;
case '+':
printHistory(`${getOutput()}+`);
clearOutput();
break;
case '=':
let a = getHistory();
let num1 = reverseFormattedString(a.slice(0, a.length - 1));
let num2 = reverseFormattedString(getOutput());
let op = a[a.length - 1];
// console.log(num1, num2);
// console.log(getHistory().slice(0, this.length));
let result;
if (op === '/') {
result = num1.toFixed(2) / num2.toFixed(2);
}
else
result = eval(`${num1}${op}${num2}`);
printHistory('');
printOutput(formattedString(result));
break;
}
})
}
for (let number of numbers) {
number.addEventListener('click', (e) => {
// let number = reverseFormattedString(getOutput());
// if (!isNaN(number)) {
// number = number + e.target.id;
// printOutput(number);
// }
if (getOutput() == '') {
// directly add the id
printOutput(e.target.id)
}
else {
//process the number in the output
let value = reverseFormattedString(getOutput());
value = value + e.target.id;
printOutput(formattedString(value))
}
})
}