Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <body>
- <h1>Expression calculator</h1>
- <p>Example:</p>
- <a href="#" onclick="document.getElementById('inp').value = '1+2'">1+2</a><br>
- <a href="#" onclick="document.getElementById('inp').value = '2*3-4/5+6'">2*3-4/5+6</a><br>
- <a href="#" onclick="document.getElementById('inp').value = '2/3+((4-5)*(6*7)-8*9'">2/3+((4-5)*(6*7)-8*9</a><br>
- <input type="text" id="inp">
- <button id="btn">Calc</button>
- <p id="rs"></p>
- <script>
- var i, m, n, k, l;
- var a1, a2, s, str = '', tmp;
- var more, bkmore;
- function F_elms(inp) { //Get the 2 sides
- a1 = ''; a2 = ''; more = true;
- n = i - 1;
- while (
- inp[n] == 'e' ||
- inp[n] == '.' ||
- !isNaN(+inp[n]) ||
- ( inp[n] == '-' && a1.indexOf('-') == -1 && (isNaN(+inp[n-1])||n == 1) )
- ) { a1 = inp[n] + a1; n-- }
- l = n + 2;
- if (n == 1 && inp[n] == '-') a1 = '-' + a1;
- if (a1 === '') a1 = '0';
- n = i + 1;
- while ( inp[n] == 'e' || inp[n] == '.' || (n == i+1 && inp[n] == '-') || !isNaN(+inp[n]) ) { a2 += inp[n]; n++ }
- if (a2 === '') a2 = '0'
- }
- function F_bkupd() { //Replace old part in bracket with calculated calc
- s = s.substr(0,k) + str + s.substr(k+tmp.length,s.length-k-tmp.length);
- document.getElementById('rs').innerHTML += ' =' + s + '<br>';
- tmp = str
- }
- document.getElementById('btn').onclick = function() {
- m = 0; n = 0;
- s = document.getElementById('inp').value;
- document.getElementById('rs').innerHTML = '';
- for (i=0; i<s.length; i++) { if (s[i] == '(') m++; if (s[i] == ')') n++ }
- for (i=0; i<m-n; i++) s += ')'; for (i=0; i<n-m; i++) s = '(' + s;
- if (m != n) document.getElementById('rs').innerHTML += ' =' + s + '<br>';
- do {
- bkmore = false;
- for (m=s.length-1; m>=0; m--) if (s[m] == '(') {
- n = m + 1; k = n; bkmore = true; str = '';
- while (s[n] != ')') {str += s[n]; n++}
- tmp = str; //Use when there's no + - * / ^ in bracket
- do {
- more = false;
- for (i=0;i<str.length;i++) if (str[i] == '^') {
- tmp = str; F_elms(str);
- str = str.substr(0,l-1) + Math.pow(+a1,+a2) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
- F_bkupd(); break
- }
- } while (more === true);
- do {
- more = false;
- for (i=0;i<str.length;i++) if (str[i] == '/') {
- tmp = str; F_elms(str);
- str = str.substr(0,l-1) + ((+a1)/(+a2)) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
- F_bkupd(); break
- }
- } while (more === true);
- do {
- more = false;
- for (i=0;i<str.length;i++) if (str[i] == '*') {
- tmp = str; F_elms(str);
- str = str.substr(0,l-1) + ((+a1)*(+a2)) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
- F_bkupd(); break
- }
- } while (more === true);
- do {
- more = false;
- for (i=0;i<str.length;i++) if (str[i] == '-' && !isNaN(+str[i-1]) ) {
- tmp = str; F_elms(str);
- str = str.substr(0,l-1) + ((+a1)-(+a2)) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
- F_bkupd(); break
- }
- } while (more === true);
- do {
- more = false;
- for (i=0;i<str.length;i++) if (str[i] == '+') {
- tmp = str; F_elms(str);
- str = str.substr(0,l-1) + ((+a1)+(+a2)) + str.substr( l+(a1+a2).length, str.length-l-(a1+a2).length );
- F_bkupd(); break
- }
- } while (more === true);
- s = s.substr(0,k-1)+s.substr(k,tmp.length)+s.substr(k+tmp.length+1,s.length-k-tmp.length);
- document.getElementById('rs').innerHTML += ' =' + s + '<br>';
- break
- }
- } while (bkmore === true);
- do {
- more = false;
- for (i=0; i<s.length; i++) if (s[i] == '^') {
- F_elms(s);
- s = s.substr( 0, s.indexOf(a1+'^'+a2) ) + Math.pow(+a1,+a2) + s.substr( s.indexOf(a1+'^'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'^'+a2)-(a1+a2).length-1 );
- document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
- }
- } while (more === true);
- do {
- more = false;
- for (i=0; i<s.length; i++) if (s[i] == '/') {
- F_elms(s);
- s = s.substr( 0, s.indexOf(a1+'/'+a2) ) + ((+a1)/(+a2)) + s.substr( s.indexOf(a1+'/'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'/'+a2)-(a1+a2).length-1 );
- document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
- }
- } while (more === true);
- do {
- more = false;
- for (i=0; i<s.length; i++) if (s[i] == '*') {
- F_elms(s);
- s = s.substr( 0, s.indexOf(a1+'*'+a2) ) + ((+a1)*(+a2)) + s.substr( s.indexOf(a1+'*'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'*'+a2)-(a1+a2).length-1 );
- document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
- }
- } while (more === true);
- do {
- more = false;
- for (i=0; i<s.length; i++) if ( s[i] == '-' && !isNaN(+s[i-1]) ) {
- F_elms(s);
- s = s.substr( 0, s.indexOf(a1+'-'+a2) ) + ((+a1)-(+a2)) + s.substr( s.indexOf(a1+'-'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'-'+a2)-(a1+a2).length-1 );
- document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
- }
- } while (more === true);
- do {
- more = false;
- for (i=0; i<s.length; i++) if (s[i] == '+') {
- F_elms(s);
- s = s.substr( 0, s.indexOf(a1+'+'+a2) ) + ((+a1)+(+a2)) + s.substr( s.indexOf(a1+'+'+a2)+(a1+a2).length+1, s.length-s.indexOf(a1+'+'+a2)-(a1+a2).length-1 );
- document.getElementById('rs').innerHTML += ' =' + s + '<br>'; break
- }
- } while (more === true)
- }
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement