-
Notifications
You must be signed in to change notification settings - Fork 13
/
Calculator.pde
48 lines (38 loc) · 1.16 KB
/
Calculator.pde
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
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.math.BigDecimal;
import java.math.MathContext;
class Calculator {
GUI gui;
ScriptEngine engine;
ScriptEngineManager manager;
Calculator(GUI g) {
gui = g;
manager = new ScriptEngineManager();
engine = manager.getEngineByName("js");
}
void evaluate() {
String exp = gui.expression.toString();
exp = exp.replaceAll("(?<!\\d|\\.)0+(?=\\d+)", "");
exp = exp.replaceAll("-{2}", "+"); // modify -- to +
exp = exp.replaceAll("\\+{2,}", "+"); // reduce ++... to +
try {
Object answer = engine.eval(exp);
if (answer == null) {
gui.expression = new StringBuilder("Invalid Input");
return;
}
if (answer.toString().length() > 14) {
BigDecimal bd = new BigDecimal(answer.toString());
bd = bd.round(new MathContext(14));
answer = bd;
}
gui.expression.delete(0, gui.expression.length());
gui.expression.append(answer);
}
catch(ScriptException e) {
gui.expression = new StringBuilder("Invalid Input");
}
}
}