-
Notifications
You must be signed in to change notification settings - Fork 0
/
operations.js
65 lines (62 loc) · 1.72 KB
/
operations.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
const ADD_OPERATOR = '+';
const SUBTRACT_OPERATOR = '-';
const MULTIPLY_OPERATOR = 'x';
const DIVIDE_OPERATOR = '÷';
//Basic math operations
function add(a,b){
return a+b;
}
function subtract(a,b){
return a-b;
}
function multiply(a,b){
return a*b;
}
function divide(a,b){
return a/b;
}
//This function selects the operation based on the operator parameter
function operate(operator, a, b){
let result;
a = Number(a);
b = Number(b);
switch(operator){
case ADD_OPERATOR:
result = add(a,b);
break;
case SUBTRACT_OPERATOR:
result = subtract(a,b);
break;
case MULTIPLY_OPERATOR:
result = multiply(a,b);
break;
case DIVIDE_OPERATOR:
result = divide(a,b);
break;
}
//Maximum length and decimal control
if(result.toString().length > 8){
if(countDecimals(result) == 0 || countInts(result) > 7){
return result.toExponential(3);
}else{
let maxDecimals = 8 - countInts(result)
return result.toFixed(maxDecimals);
}
}else if(result == Infinity){
return "Undefined";
}else if(isNaN(result)){
return "Indeterminate";
}else{
return result;
}
}
//This function count the number of decimals from value passed
function countDecimals(value){
if(Math.floor(value) === value) return 0;
return value.toString().split(".")[1].length || 0;
}
//This function count the number of ints from value passed
function countInts(value){
if(Math.floor(value) === value) return value.toString().length;
return value.toString().split(".")[0].length || 0;
}