-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
127 lines (114 loc) · 2.59 KB
/
script.js
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
123
124
125
126
127
const buttons = document.querySelectorAll('span');
const screen = document.querySelector('.screen');
let entries = [],
result = '',
op = '';
screen.innerHTML = 0;
for (let i = 0; i < buttons.length; i++) {
buttons[i].addEventListener(
'click',
function () {
if (buttons[i].className === 'clear') {
screen.innerHTML = 0;
reset();
} else {
if (buttons[i].className != 'operator' && buttons[i].className != 'equals') {
entries.push(buttons[i].innerHTML);
screen.innerHTML = doScr(entries);
}
if (buttons[i].className === 'operator') {
op = getOperator(buttons[i].innerHTML);
entries.push(buttons[i].innerHTML);
}
if (buttons[i].className === 'equals') {
if (result != '') {
result = doOp(entries);
} else {
result = doOperation(entries);
}
if (isFinite(result)) {
screen.innerHTML = result.toFixed(2).replace(/\.?0*$/g, '');
} else {
screen.innerHTML = 'N/A';
reset();
}
}
}
},
false,
);
}
function getOperator(myOp) {
let theOp = '';
switch (myOp) {
case '+':
theOp = myOp;
break;
case '-':
theOp = myOp;
break;
case '/':
theOp = myOp;
break;
case '*':
theOp = myOp;
break;
default:
break;
}
return theOp;
}
function doOp(arr) {
let myIndex = arr.lastIndexOf(op);
let list = arr.slice(myIndex, arr.length);
list.unshift(result);
let answer = doOperation(list);
return answer;
}
function doOperation(arr) {
let n1 = '',
n2 = '';
let opReached = false;
arr.map(function (item) {
if (item != op && opReached === false) {
n1 = n1 + item;
} else {
if (item === op) opReached = true;
else {
n2 = n2 + item;
}
}
});
if (opReached === true) {
let ans = calculate(n1, n2, op);
return ans;
} else return parseFloat(n1);
}
function calculate(num1, num2, op) {
let answer = '';
switch (op) {
case '+':
answer = parseFloat(num1) + parseFloat(num2);
break;
case '-':
answer = parseFloat(num1) - parseFloat(num2);
break;
case '/':
answer = parseFloat(num1) / parseFloat(num2);
break;
case '*':
answer = parseFloat(num1) * parseFloat(num2);
break;
}
return answer;
}
function doScr(arr) {
let myIndex = arr.lastIndexOf(op);
let list = arr.slice(myIndex + 1, arr.length);
return list.join('');
}
function reset() {
result = '';
entries = [];
op = '';
}