fork download
  1. <?php
  2.  
  3. header('Content-Type: text/plain; charset=UTF-8');
  4.  
  5. $input = '10.512/2.5*3.500+2-100='; // use dot as decimal mark
  6. $inputLength = mb_strlen($input);
  7.  
  8. $number = 0;
  9. $result = 0;
  10. $op = '';
  11.  
  12. for ($i = 0; $i < $inputLength; $i++) {
  13.  
  14. $char = mb_substr($input, $i, 1);
  15.  
  16. if ($char == '*' || $char == '/' || $char == '+' || $char == '-' || $char == '=') {
  17.  
  18. $number = floatval($number);
  19.  
  20. echo "op=[$op], result=[$result], number=[$number], char=[$char]\n";
  21.  
  22. if (empty($op)) {
  23. $result = $number;
  24. }
  25.  
  26. switch ($op) {
  27. case '*':
  28. $result = $result * $number;
  29. break;
  30. case '+':
  31. $result = $result + $number;
  32. break;
  33. case '-':
  34. $result = $result - $number;
  35. break;
  36. case '/':
  37. $result = $result / $number;
  38. break;
  39. }
  40.  
  41. $op = $char;
  42.  
  43. if ($op == '=') {
  44. echo "Ответ: $input$result";
  45. die();
  46. }
  47.  
  48. $number = 0;
  49. } elseif (is_numeric($char) || $char == '.') {
  50. $number .= $char;
  51. } else {
  52. echo "Неверный символ: '$char'\n";
  53. }
  54. }
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
op=[], result=[0], number=[10.512], char=[/]
op=[/], result=[10.512], number=[2.5], char=[*]
op=[*], result=[4.2048], number=[3.5], char=[+]
op=[+], result=[14.7168], number=[2], char=[-]
op=[-], result=[16.7168], number=[100], char=[=]
Ответ: 10.512/2.5*3.500+2-100=-83.2832