-
Notifications
You must be signed in to change notification settings - Fork 0
/
calculator.JS
127 lines (120 loc) · 2.65 KB
/
calculator.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 form = document.querySelector('.calculator');
let input = '';
let numberButtonPress = 0;
let typedNumbers = [];
let currentInput;
let typedOperators = [];
let calculation = 0;
let nextCalculation = false;
form.addEventListener('click', pressButton);
form.addEventListener('submit', calculate);
function calculate(event) {
event.preventDefault();
for (let i in typedNumbers) {
i = +i;
let firstNumber;
i === 0 ? (firstNumber = +typedNumbers[i]) : (firstNumber = calculation);
let operator = typedOperators[i];
let secondNumber = +typedNumbers[i + 1];
if (operator === '=') {
document.querySelector('.display').setAttribute('value', calculation);
nextCalculation = true;
break;
} else calculation = calculationF(firstNumber, secondNumber, i);
}
}
function calculationF(a, b, i) {
switch (typedOperators[i]) {
case '/':
return b === 0 ? 'can not divide by zero' : a / b;
break;
case '*':
return a * b;
break;
case '-':
return a - b;
break;
case '+':
return a + b;
break;
default:
return 'operator not recognised';
}
}
function pressOnNumber(event) {
if (numberButtonPress === 1) {
input = currentInput;
document.querySelector('.display').setAttribute('value', input);
} else {
input = input + currentInput;
document.querySelector('.display').setAttribute('value', input);
}
}
function pressOnOperator(event) {
if (nextCalculation === false) {
typedNumbers.push(input);
typedOperators.push(currentInput);
numberButtonPress = 0;
} else {
typedNumbers = [];
typedOperators = [];
typedNumbers.push(calculation);
typedOperators.push(currentInput);
numberButtonPress = 0;
nextCalculation = false;
}
}
function pressOnEqual(event) {
typedNumbers.push(input);
typedOperators.push(currentInput);
numberButtonPress = 0;
}
function cancelAll(event) {
numberButtonPress = 0;
input = 0;
nextCalculation = false;
typedNumbers = [];
typedOperators = [];
document.querySelector('.display').setAttribute('value', '');
}
function changeSign() {
input === 0 ? (input = '') : (input = input * -1);
document.querySelector('.display').setAttribute('value', input);
}
function pressButton(event) {
currentInput = event.target.defaultValue;
numberButtonPress += 1;
switch (currentInput) {
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
case '.':
pressOnNumber();
break;
case '+/-':
changeSign();
break;
case '+':
case '-':
case '*':
case '/':
pressOnOperator();
break;
case 'C':
cancelAll();
break;
case '=':
pressOnEqual();
break;
default:
console.log('you just found a bug');
break;
}
}