Показать сообщение отдельно
  #1 (permalink)  
Старый 30.09.2011, 00:03
Аспирант
Отправить личное сообщение для qwertyuiop10 Посмотреть профиль Найти все сообщения от qwertyuiop10
 
Регистрация: 29.09.2011
Сообщений: 42

погрешности калькулятора
<html>
<head>
</head>
<body>
<script language="javascript">
str="5*8/3*6/10";
ss1=str.split(/\+|\-|\*|\//);
ss2=str.split(/0|1|2|3|4|5|6|7|8|9/);
//строка, числовой массив и массив действий

//------функции---
function clear(){
ss4=[];
ss3=[];

j=0;
for(i=0;i<ss1.length;i++){
if(ss1[i]!=""){
ss4[j++]=ss1[i];
}}
ss1=ss4;

j=0;
for(i=0;i<ss2.length;i++){
if(ss2[i]!=""){
ss3[j++]=ss2[i];
}}
ss2=ss3;}
//-----------чистка массивов------------
clear();
//-----------делим---------------------------
for(i=0;i<ss2.length;i++){
 if(ss2[i]=="/"){
  ss1[i]=ss1[i]/ss1[i+1];
  ss1[i]=Math.round(ss1[i]*100000)/100000;
  ss1[i+1]='';
  ss2[i]='';
  clear();
  i=0;
alert("Строка: "+str+"\nМассив числел: "+ss1+"\nМассив дейсивий: "+ss2+"\n");
}}
for(i=0;i<ss2.length;i++){
 if(ss2[i]=="/"){
  ss1[i]=ss1[i]/ss1[i+1];
  ss1[i]=Math.round(ss1[i]*100000)/100000;
  ss1[i+1]='';
  ss2[i]='';
  clear();
  i=0;
alert("Строка: "+str+"\nМассив числел: "+ss1+"\nМассив дейсивий: "+ss2+"\n");
}}


//--------------------------------------
for(i=0;i<ss2.length;i++){
 if(ss2[i]=="*"){
  ss1[i]=ss1[i]*ss1[i+1];
  ss1[i+1]='';
  ss2[i]='';
  clear();
  i=0;
alert("Строка: "+str+"\nМассив числел: "+ss1+"\nМассив дейсивий: "+ss2+"\n");
}}
for(i=0;i<ss2.length;i++){
 if(ss2[i]=="*"){
  ss1[i]=ss1[i]*ss1[i+1];
  ss1[i+1]='';
  ss2[i]='';
  clear();
  i=0;
alert("Строка: "+str+"\nМассив числел: "+ss1+"\nМассив дейсивий: "+ss2+"\n");
}}
document.getElementsByTagName("body")[0].innerHTML=document.getElementsByTagName("body")[0].innerHTML+"Строка: "+str+"<br>Массив числел: "+ss1+"<br>Массив дейсивий: "+ss2+"<br>";
</script>
</body>
</html>

это калькулятор (часть кода убрал, оставил * и /), смысл в том, что он разбирает готовую строку (str) на подстроки чисел и действий, и считает. проблема при .../3*6... при этом всплывают погрешности, пытался убрать округлив, не получилось, конечно лучше сначала умножать, потом делить, но это намного сложнее, так как скрипт умножает соседние числа и получится .../18... что делать? как убрать погрешности?
пс. циклы дважды поставил, потому, что последнее действие не выполнялось, долго искал ошибку, не нашёл и оставил так покашто.

Последний раз редактировалось qwertyuiop10, 30.09.2011 в 00:07.
Ответить с цитированием