-
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.37 KB
/
script.js
File metadata and controls
122 lines (112 loc) · 3.37 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
class Calcy{
constructor(pre_op, curr_op){
this.pre_op = pre_op
this.curr_op = curr_op
this.clear()
}
clear(){
this.curr = ''
this.pre = ''
this.operation = undefined
}
delete(){
this.curr = this.curr.toString().slice(0, -1)
}
appendNumber(number){
if(number==='.' && this.curr.includes('.'))return
this.curr = this.curr.toString() + number.toString()
}
chooseOperation(operation){
if(this.curr === '')return
if(this.pre !== ''){
this.compute()
}
this.operation = operation
this.pre = this.curr
this.curr=''
}
compute(){
let compute
const prev = parseFloat(this.pre)
const current = parseFloat(this.curr)
if(isNaN(prev)||isNaN(current)) return
switch(this.operation){
case '+':
compute = prev + current
break
case '-':
compute = prev - current
break
case '/':
compute = prev / current
break
case '*':
compute = prev * current
break
default:
return
}
this.curr = compute
this.operation = undefined
this.pre = ''
}
getDisplayNumber(number){
const stringNUmber = number.toString()
const intDigits = parseFloat(stringNUmber.split('.')[0])
const decDigits = stringNUmber.split('.')[1]
let intDisplay
if(isNaN(intDigits)){
intDisplay = ''
}
else{
intDisplay = intDigits.toLocaleString('en',{
maximumFractionDigits: 0
})
}
if(decDigits!=null){
return `${intDisplay}. ${decDigits}`
}
else{
return intDisplay
}
}
updateDisplay(){
this.curr_op.innerText = this.getDisplayNumber(this.curr)
this.pre_op.innerText = this.pre
if(this.operation != null){
this.pre_op.innerText = `${this.getDisplayNumber(this.pre)} ${this.operation}`
}
}
}
const numButtons = document.querySelectorAll('[data-number]')
const opnButtons = document.querySelectorAll('[data-operation]')
const equals = document.querySelector('[data-equals]')
const deleteButton = document.querySelector('[data-delete]')
const clear = document.querySelector('[data-clear]')
const pre_op = document.querySelector('[data-pre-op]')
const curr_op = document.querySelector('[data-current-op]')
const calculator = new Calcy(pre_op,curr_op)
numButtons.forEach(button=>{
button.addEventListener('click', ()=>{
calculator.appendNumber(button.innerText)
calculator.updateDisplay()
})
})
opnButtons.forEach(button=>{
button.addEventListener('click', ()=>{
calculator.chooseOperation(button.innerText)
calculator.updateDisplay()
})
})
equals.addEventListener('click',button=>{
calculator.compute()
calculator.updateDisplay()
})
clear.addEventListener('click',button=>{
calculator.clear()
calculator.updateDisplay()
})
deleteButton.addEventListener('click',button=>{
calculator.delete()
calculator.updateDisplay()
})