Tämä JavaScript-ohjelma tunnistaa käyttäjän kirjoittamasta tekstistä laskulausekkeita ja laskee automaattisesti niiden arvon, jos laskulausekkeen jälkeen tulee yhtäsuuruusmerkki ja kysymysmerkki. Näin yksinkertaisiin laskuihin ei tarvitse laskinta esimerkiksi keskustelun viestiä kirjoittaessa.
Esimerkiksi käyttäjä kirjoittaa:
Vuodessa on 60 * 60 * 24 * 365 = ?
Samalla hetkellä teksti muuttuu muotoon:
Vuodessa on 60 * 60 * 24 * 365 = 31536000
Ja käyttäjä jatkaa näin:
Vuodessa on 60 * 60 * 24 * 365 = 31536000 sekuntia.
Laskulauseke lasketaan suoraan JavaScriptin eval-funktiolla, joten tarvittavan koodin pituus ei ole järin suuri. Ohjelma pyöristää tuloksen kuuden desimaalin tarkkuudelle. Käytössä on desimaalipiste amerikkalaiseen tapaan, mutta tarpeen tullen desimaalierottimen muutos ei ole vaikeaa.
Jostain syystä Operalla tekstikohdistin siirtyy häiritsevästi tekstin alkuun tekstin muuttuessa. Tietääkö kukaan, miten tämän voi korjata?
<script> function lasku(teksti) { // laskutoimituksen merkit merkit = "0123456789.+-*/() "; // tekstin pituus pituus = teksti.value.length; // jos viimeiset merkit ovat "= ?"... if (teksti.value.substr(pituus - 3, 3) == "= ?") { alku = -1; // etsitään laskulausekkeen alku sallittujen merkkien avulla for (i = pituus - 4; i >= 0; i--) { if (merkit.indexOf(teksti.value.charAt(i)) != -1) { if (teksti.value.charAt(i) != " ") alku = i; } else { break; } } // jos sopiva laskulauseke löytyi... if (alku != -1) { // poimitaan laskulauseke tekstistä lauseke = teksti.value.substring(alku, pituus - 3); // lasketaan sen arvo eval-funktiolla try { lauseke = eval(lauseke); } catch (virhe) { return; } // pyöristetään kuuden desimaalin tarkkuudelle lauseke = (Math.round(lauseke * 1000000) / 1000000); // korvataan kysymysmerkki laskun tuloksella teksti.value = teksti.value.substr(0, pituus - 1) + lauseke; } } } </script> <textarea cols="40" rows="8" onkeyup="lasku(this)"></textarea>
Kuulostaa kätevältä, vaikka testata en kerinnytkään :) Onko kenties Ohjelmointiputkaan tulossa tällainen uuden ulkoasun mukana?
javascript:function a(){teksti=document.getSelection();merkit="0123456789.+-*/() ";pituus=teksti.length;alku=-1;for(i=pituus-4;i>=0;i--) {if(merkit.indexOf(teksti.charAt(i))!=-1){if(teksti.charAt(i)!=" "){alku=i;}}else{break;}}if(alku!=-1){lauseke=teksti;try{lauseke=eval(lauseke);} catch(virhe){return;}lauseke=(Math.round(lauseke*1000000)/1000000);alert(lauseke);}};a();
Kirjanmerkki-versio eli maalat sivuilta lausekkeen ja painat niin saat vastauksen.
Ja tulos on tyylikäs ilmoittaa <a title="tulos"> -tyyliin. Niin ei häiritse lukiessa. Eikä siis tarvi myöskään noita = ? -juttuja tunkea erikseen.
Eikös tuon kohdistimen alkuun menemisen voi korjata jotenkin laittamalla selectionStart ja selectionEnd -arvot.
teksti.selectionStart = teksti.value.length; teksti.selectionEnd = teksti.value.length;
Ovela vinkki! Tälläinen voisi tosiaan olla integroituna Ohjelmointiputkaankin.
Ja tämä on vieläpä sitä, missä JavaScriptistä voi oikeasti olla hyötyä!
lainaus:
Ovela vinkki! Tälläinen voisi tosiaan olla integroituna Ohjelmointiputkaankin.
olen samaa mieltä käyttöön myös ohjelmointiputkaan :D
Oikeasti JavaScriptistä on hyötyä, jos sillä tehdään 3D-räiskintä ;)
moptim kirjoitti:
Oikeasti JavaScriptistä on hyötyä, jos sillä tehdään 3D-räiskintä ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.