-
Notifications
You must be signed in to change notification settings - Fork 0
/
calculator.js
104 lines (101 loc) · 3.11 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
export default class Calculator {
constructor(
primaryOperationDisplay,
secondaryOperationDisplay,
operationDisplay
) {
this.#primaryOperationDisplay = primaryOperationDisplay;
this.#secondaryOperationDisplay = secondaryOperationDisplay;
this.#operationDisplay = operationDisplay;
this.clear();
}
#primaryOperationDisplay;
#secondaryOperationDisplay;
#operationDisplay;
get primaryOperand() {
return parseFloat(this.#primaryOperationDisplay.dataset.value);
}
set primaryOperand(value) {
this.#primaryOperationDisplay.dataset.value = value ?? "";
this.#primaryOperationDisplay.textContent = displayNumber(value);
}
get secondaryOperand() {
return parseFloat(this.#secondaryOperationDisplay.dataset.value);
}
set secondaryOperand(value) {
this.#secondaryOperationDisplay.dataset.value = value ?? "";
this.#secondaryOperationDisplay.textContent = displayNumber(value);
}
get operation() {
return this.#operationDisplay.textContent;
}
set operation(value) {
this.#operationDisplay.textContent = value;
}
addDigit(digit) {
if (
digit === "." &&
this.#primaryOperationDisplay.dataset.value.includes(".")
)
return;
if (this.primaryOperand === 0) {
this.primaryOperand = digit;
return;
}
this.primaryOperand = this.#primaryOperationDisplay.dataset.value + digit;
}
removeDigit() {
const numberString = this.#primaryOperationDisplay.dataset.value;
if (numberString.length <= 1) {
this.primaryOperand = 0;
return;
}
this.primaryOperand = numberString.substring(0, numberString.length - 1);
}
chooseOperation(operationInput) {
if (this.operation !== "") return;
this.operation = operationInput;
this.secondaryOperand = this.primaryOperand;
this.primaryOperand = 0;
}
evaluate() {
let result;
switch (this.operation) {
case "*":
result = this.secondaryOperand * this.primaryOperand;
break;
case "÷":
result = this.secondaryOperand / this.primaryOperand;
break;
case "+":
result = this.secondaryOperand + this.primaryOperand;
break;
case "-":
result = this.secondaryOperand - this.primaryOperand;
break;
default:
return;
}
this.clear();
this.primaryOperand = result;
console.log(result);
return result;
}
clear() {
this.primaryOperand = 0;
this.secondaryOperand = "";
this.operation = "";
}
}
const NUMBER_FORMATTER = new Intl.NumberFormat("en", {
maximumFractionDigits: 20,
});
function displayNumber(number) {
//tantsi s bunbnami pt a formata miile cu virgula :)
const stringNumber = number?.toString() || "";
if (stringNumber === "") return "";
const [integer, decimal] = stringNumber.split(".");
const formatedInteger = NUMBER_FORMATTER.format(integer);
if (decimal == null) return formatedInteger;
return formatedInteger + "." + decimal;
}