Я хочу создать Postfix Evaluator, который работает с многозначными и десятичными числами.Программа работает с многозначными числами, но не с десятичными.Как я могу это сделать?Я использовал инфиксное выражение: «10 + 20 * (50/3) + 4», что в постфиксе равно «10 20 50 3 / * + 4 +».В результате я получил 347,33333333333337, что правильно.Мне просто нужен оценщик для работы с десятичными числами.
public class EvaluarExpresion {
public static double evaluaExpresion (String postfija) {
MyStack<Double> stack = new MyStack<Double>();
//String postfija= expresionPostFijo();
for(int i = 0; i < postfija.length(); i++) {
char c = postfija.charAt(i);
if(c == ' ') {
continue;
}else if(Character.isDigit(c) || c == '.') {
int n = 0;
int divider =1;
boolean hasDecimal = false;
while(Character.isDigit(c) || c == '.') {
if(c == '.') {
hasDecimal = true;
} else {
if(hasDecimal) {
divider *=10;
}
n = n*10 + (int)(c-'0');
c = postfija.charAt(i);
}
i++;
}
i--;
stack.push((double) n);
} else {
Double val1 = stack.pop();
Double val2 = stack.pop();
switch(c)
{
case '+':
stack.push(val2+val1);
break;
case '-':
stack.push(val2- val1);
break;
case '/':
stack.push(val2/val1);
break;
case '*':
stack.push(val2*val1);
break;
case '^':
stack.push(Math.pow(val2, val1));
break;
}
}
}
return stack.pop();
}
public static void main(String[] args) {
// This is an example of an infix expression String dato = "10 + 20 * ( 50 / 3 ) + 4";
//The expression provided below is a postfix expression
System.out.println(evaluaExpresion("10 20 50 3 / * + 4 +"));
//The result is 347.33333333333337 which is correct
}
}