PDA

View Full Version : [javascript] Calcolatrice con javascript non funzionante


matteo11102009
11-11-2014, 14:58
ciao a tutti.. oggi ho provato a realizzare una calcolatrice con javascript solo che non esegue correttamente la somma e non esegue le operazioni di sottrazione, moltiplicazione e divisione; sapreste aiutarmi? vi allego il codice:
Javascript:

<script type="text/javascript">
var temp = 0;
function cancella() {
temp=0;
document.getElementById("in_text_result").value="0";
document.getElementById("hidden_accum").value="";
document.getElementById("hidden_result").value="";
}
function selezione(value){
var sem = "0";
if (document.getElementById("in_text_result").value=="0") {
document.getElementById("in_text_result").value="";
}
value = document.getElementById("in_text_result").value + value;
if (sem=="0") {
var ottengo_valore_completo = parseFloat(value);
document.getElementById("in_text_result").value=value;
document.getElementById("hidden_accum").value=value;
}

}
function operazione(operatore){
/* value = 20 = .
* value = 21 = +
* value = 22 = -
* value = 23 = *
* value = 24 = /
* value = 25 = "="
*/
//verifico la presenza di operatori
valore = document.getElementById("hidden_accum").value;
switch(operatore){
case 20:
operatore=".";
break;
case 21:
temp = parseFloat(valore)+temp;
operatore="+";
document.getElementById("hidden_accum").value="";
document.getElementById("hidden_result").value=temp;
break;
case 22:
temp = parseFloat(valore)-temp;
operatore="-";
document.getElementById("hidden_accum").value="";
document.getElementById("hidden_result").value=temp;
break;
case 23:
temp = parseFloat(valore)*temp;
operatore="*";
document.getElementById("hidden_accum").value="";
document.getElementById("hidden_result").value=temp;
break;
case 24:
temp = parseFloat(valore)/temp;
operatore="/";
document.getElementById("hidden_accum").value="";
document.getElementById("hidden_result").value=temp;
break;
case 25:
document.getElementById("in_text_result").value = document.getElementById("hidden_result").value;
break;
}
if (operatore!="25") {
document.getElementById("in_text_result").value=operatore;
document.getElementById("hidden_accum").value=temp;

}
}
</script>

HTML

<table border="0" cellpadding="3" cellspacing="3">
<tr>
<td colspan="4"><input disabled type="text" value="0" id="in_text_result" onchange=""></td>
</tr>
<tr>
<td ><input type="reset" id="button_tipe" onclick="cancella();" value="CANC"></td>
<td ><input type="button" id="button_tipe" value="*" onclick="operazione(23)"></td>
<td ><input type="button" id="button_tipe" value="/" onclick="operazione(24)"></td>
<td ><input type="button" id="button_tipe" value="-" onclick="operazione(22)"></td>
</tr>
<tr>
<td ><input type="button" id="button_tipe" value="7" onclick="selezione(7);"></td>
<td ><input type="button" id="button_tipe" value="8" onclick="selezione(8);"></td>
<td ><input type="button" id="button_tipe" value="9" onclick="selezione(9);"></td>
<td rowspan="2"><input type="button" id="button_tipe" value="+" onclick="operazione(21)"></td>
</tr>
<tr>
<td ><input type="button" id="button_tipe" value="4" onclick="selezione(4);"></td>
<td ><input type="button" id="button_tipe" value="5" onclick="selezione(5);"></td>
<td ><input type="button" id="button_tipe" value="6" onclick="selezione(6);"></td>
</tr>
<tr>
<td ><input type="button" id="button_tipe" value="1" onclick="selezione(1);"></td>
<td ><input type="button" id="button_tipe" value="2" onclick="selezione(2);"></td>
<td ><input type="button" id="button_tipe" value="3" onclick="selezione(3);"></td>
<td rowspan="2"><input type="button" id="button_tipe" value="=" onclick="operazione(25)"></td>
</tr>
<tr>
<td colspan="2"><input type="button" id="button_tipe" value="0" onclick="selezione(0);"></td>
<td ><input type="button" id="button_tipe" value="." onclick="operazione(20)"></td>
</tr>
<input type="hidden" value id="hidden_accum">
<input type="hidden" value id="hidden_result">
</table>

Grazie mille in anticipo per ogni eventuale risposta

Daniels118
11-11-2014, 15:41
non esegue correttamente la somma e non esegue le operazioni di sottrazione, moltiplicazione e divisione
Praticamente non esegue nulla :D
Puoi inserirla in jsfiddle?

matteo11102009
11-11-2014, 19:56
non sono riuscito ad importare il file sul sito... ho condiviso il file su google drive.. il link per accedervi è il seguente: https://drive.google.com/file/d/0BxLehj0TH_IAWXdhVDBiZXFIbG8/view?usp=sharing

Amsirak
12-11-2014, 01:05
Ciao matteo, ci sono alcuni errori semantici: ti mostro uno stato della macchina dopo una semplice somma;

temp = 0

---------------------

premo 9 (value = 9)
value = document.getElementById("in_text_result").value + value = "" + 9 = "9"
document.getElementById("in_text_result").value = value = "9"
document.getElementById("hidden_accum").value = value = "9"

---------------------

premo +

valore = document.getElementById("hidden_accum").value = "9"
temp = parseFloat(valore)+temp; = 9 + 0 = 9
operatore="+"
document.getElementById("hidden_accum").value = ""
document.getElementById("hidden_result").value = temp = 9
document.getElementById("in_text_result").value = operatore = "+"
document.getElementById("hidden_accum").value = temp = 9

--------------------

premo 7 (value = 7)

value = document.getElementById("in_text_result").value + value = "+" + 7 = "+7"
document.getElementById("in_text_result").value = value = "+7"
document.getElementById("hidden_accum").value = value = "+7"

--------------------

premo =

valore = document.getElementById("hidden_accum").value = "+7"
document.getElementById("in_text_result").value = document.getElementById("hidden_result").value = 9 //QUESTA SOMMA (9+7) VISUALIZZA 9

--------------------

premo +

valore = document.getElementById("hidden_accum").value = "+7"
temp = parseFloat(valore)+temp; = 7 + 9 = 16
operatore="+"
document.getElementById("hidden_accum").value = ""
document.getElementById("hidden_result").value = temp = 16
document.getElementById("in_text_result").value = operatore = "+"
document.getElementById("hidden_accum").value = temp = 16

---------------------

premo 1 (value = 1)

value = document.getElementById("in_text_result").value + value = "+" + 1 = "+1"
document.getElementById("in_text_result").value = value = "+1"
document.getElementById("hidden_accum").value = value = "+1"

--------------------

premo =

valore = document.getElementById("hidden_accum").value = "+1"
document.getElementById("in_text_result").value = document.getElementById("hidden_result").value = 16 //QUESTA SOMMA (9+7+1) VISUALIZZA 16

Come vedi, quando si preme = viene visualizzato il valore contenuto nella variabile
document.getElementById("hidden_result").value, che però viene incrementata solo quando si preme il tasto +, ignorando completamente il secondo operando!
Quindi premi "9, +" e in quel momento
document.getElementById("hidden_result").value diventa uguale a 9.
Poi premi 7 e
document.getElementById("hidden_result").value resta uguale a 9.
Poi premi = e
document.getElementById("in_text_result").value diventa uguale a document.getElementById("hidden_result").value, cioè a 9.
La seconda somma aggiunge anche il 7 alla variabile document.getElementById("hidden_result").value portanto il totale a 16 (qualunque numero sommi dopo, io ho sommato 1 ma il risultato sarebbe stato 16 a prescindere)

Per aggiustare addizione e sottrazione ti basta sostituire il case 25:
case 25:
document.getElementById("in_text_result").value = parseFloat(document.getElementById("hidden_result").value) + parseFloat(document.getElementById("hidden_accum").value);
break;

Per la moltiplicazione invece è diverso: dopo che premi *, document.getElementById("hidden_accum").value = "". Quindi poi la variabile valore diventa "", e quando cerca di dare un valore a temp, fa temp = parseFloat(valore)*temp; parseFloat("") dà NaN.