Показать сообщение отдельно
  #12 (permalink)  
Старый 26.10.2014, 22:40
Новичок на форуме
Отправить личное сообщение для Scampada Посмотреть профиль Найти все сообщения от Scampada
 
Регистрация: 26.10.2014
Сообщений: 7

Сообщение от рони Посмотреть сообщение
Scampada,
примерно так без скобок и синусов
function calc(str)
 	{
 	  str = str.replace(/\s+/g, '');
      var re = /(\d+(\.\d+)*)\!/;

 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b)
 	      {
 	        var temp = 1;
            b = parseInt(b);
            while(b) temp *= b--;
            return temp.toFixed(10).toString();
 	      }
 	    )
 	  };

     re = /(\d+\.?\d*)\^(\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return Math.pow(b, c).toFixed(10).toString();
 	      }
 	    )
 	  };
      re = /(-*\d+\.?\d*)\/(-*\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return (b / c).toFixed(10).toString();
 	      }
 	    )
 	  };

      re = /(-*\d+\.?\d*)\*(-*\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return (b * c).toFixed(10).toString();
 	      }
 	    )
 	  };
      re = /(-*\d+\.?\d*)\-(-*\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return (b - c).toFixed(10).toString();
 	      }
 	    )
 	  };
      re = /(-*\d+\.?\d*)\+(-*\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return (+b + +c).toFixed(10).toString();
 	      }
 	    )
 	  };
 	  return str
 	}
 	alert([calc('2^2^2'),calc('2^2 + 2! -3^1'),calc('-5 + -5')])
Спасибо. Возьму на заметку.
Ответить с цитированием