If I input ( 5 x 2 ) x 2, it gives me 20. But... if I input 2 x ( 5 x 2 ), it gives me 10.
Code:
function Calculator_MathBackwards(%a)
{
for(%b=0;%b<strLen(%a);%b++)
%c = getSubStr(%a, %b, 1) @ %c;
return %c;
}
function Calculator_Parse(%string)
{
%string = stripChars(%string, " ");
%string = strReplace(%string, "+", " + ");
%string = strReplace(%string, "x", " x ");
%string = strReplace(%string, "*", " * ");
%string = strReplace(%string, "/", " / ");
%string = strReplace(%string, "-", " - ");
%string = strReplace(%string, "^", " ^ ");
if(strPos(%string, "(") > -1 && strPos(%string, ")") > 0)
{
%f = Calculator_MathBackwards(%string);
%start = strPos(%string, "(");
%close = mAbs(strPos(%f, ")") - strLen(%string));
%close2 = mAbs(%close - strLen(%string));
%string = Calculator_Parse(stripTrailingSpaces(getSubStr(%string, %start + 1, %close - 2))) @ getSubStr(%string, strLen(%string) - %close2, strLen(%string) - (strLen(%string) - %close2));
}
for(%a=0;%a<getWordCount(%string);%a++)
{
if(getWord(%string, %a) $= "^" && %a != 0)
{
%f = getWord(%string, %a-1);
%l = getWord(%string, %a+1);
%string = setWord(%string, %a, mPow(%f, %l));
%string = removeWord(removeWord(%string, %a+1), %a-1);
%a = %a - 2;
}
}
for(%a=0;%a<getWordCount(%string);%a++)
{
if(getWord(%string, %a) $= "x" || getWord(%string, %a) $= "*" || getWord(%string, %a) $= "/" && %a != 0)
{
%f = getWord(%string, %a - 1);
%l = getWord(%string, %a + 1);
%o = getWord(%string, %a);
switch$(%o)
{
case "x":
%string = setWord(%string, %a, %f * %l);
%string = removeWord(%string, %a + 1);
%string = removeWord(%string, %a - 1);
%a = %a - 2;
case "*":
%string = setWord(%string, %a, %f * %l);
%string = removeWord(%string, %a + 1);
%string = removeWord(%string, %a - 1);
%a = %a - 2;
case "/":
%string = setWord(%string, %a, %f / %l);
%string = removeWord(%string, %a + 1);
%string = removeWord(%string, %a - 1);
%a = %a - 2;
}
}
}
for(%a=0;%a<getWordCount(%string);%a++)
{
if(getWord(%string, %a) $= "+" || getWord(%string, %a) $= "-" && %a != 0)
{
%f = getWord(%string, %a - 1);
%l = getWord(%string, %a + 1);
%o = getWord(%string, %a);
switch$(%o)
{
case "+":
%string = setWord(%string, %a, %f + %l);
%string = removeWord(%string, %a + 1);
%string = removeWord(%string, %a - 1);
%a = %a - 2;
case "-":
%string = setWord(%string, %a, %f - %l);
%string = removeWord(%string, %a + 1);
%string = removeWord(%string, %a - 1);
%a = %a - 2;
}
}
}
if(%string $= "1.#INF")
{
%string = "Error";
}
$Calculator_String = %string;
Calculator_Screen.setValue("\c7" @ $Calculator_String);
return %string;
}