Newsgroup: it.comp.lang.javascript
Titolo: Calcolo importo o %

Spiego subito: da un importo iniziale l'utente deve poter calcolare la
percentuale se inserisce l'importo della commissione, altrimenti
l'importo della commissione se inserisce la percentuale.
Le cifre valide sono riferite ad euro, quindi le cifre saranno
arrotondate con 2 decimali, ed il mio problema è questo:
se ad es. ho 13000 come importo iniziale, se inserisco 1500 come imp.
comm. avrò 11.54 come %, ma se inserisco 11.54 come % avrò come imp.
comm. 1500.2, quindi ottengo una differenza, seppur minima.
Questo è lo script che lancio sull'evento onBlur di ognuno delle 3
text con cui eseguo i calcoli sopra:
function calcola(val) {
  var importo = document.forms[1].importo_er.value;
  var percent = document.forms[1].comm.value;
  var importo_comm = document.forms[1].importo_comm.value;
  if (val == "imp") {  // se è chiamata dalla text importo iniziale
  	document.forms[1].comm.value = "";
  	document.forms[1].importo_comm.value = "";
  } else if (val == "perc") {  // se è chiamata dalla text della
percentuale
	if (importo != "") {
		var tot_comm = importo * percent / 100;
	  	document.forms[1].importo_comm.value = tot_comm;
	}
  } else if (val == "comm") {  // se è chiamata dalla text importo
comm
	if (importo != "") {
		percent =  (Math.round( ( (importo_comm * 100) / importo)*100))/100;
	  	document.forms[1].comm.value = percent;
	}
  }
}
E' giusto questo approccio di lavoro, ossia utilizzare 3 text da far
modificare liberamente dall'utente, oppure sarebbe meglio utilizzare
una select per fargli scegliere se vuole inserire un importo od una %,
oppure cos'altro!?!?!?
Thanks

 		percent =  (Math.round( ( (importo_comm * 100) / importo)*100))/100;
qua arrotondi ... per forza hai differenze.
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.


Si è vero, perchè la parte dell'arrotondamento l'avevo aggiunta dopo!
Il problema rimane però, perchè anche inserendo l'arrotondamento su
tot_comm
(ad es. var tot_comm = (Math.round(importo * percent / 100)/100)*100;)
  ho la % e l'imp. comm. "uguali", ma l'importo iniziale su cui
calcolarli non è più esatto, perchè gli arrotondamenti sono a 2
decimali massimo, quindi se ad es. metto su 13000 una % di 11.54 avrò
1500 di imp. comm, e viceversa, però l'importo iniziale non sarà più
13000 ma 12998.2668...
Non so se è un problema di come gestisco gli arrotondamenti o se sto
sbagliando proprio l'approccio di come affrontare questa situazione!
Suggerimenti!?!?? ...inserire un pallottoliere web?!!?
Thanks

 sbagliando proprio l'approccio di come affrontare questa situazione!
dovresti ragionare un attimo in modo matematico / calcolo percentuale ...
un sito su cui ho lavorato:
 - calcolo imponibile
 - aggiungo iva (utente finale)
 - in alcune condizioni arrotondo al primo decimale
risultato? in contabilità entravano gli ordini con prezzi errati, perché
entrava l'imponibile senza considerare però l'ivato arrotondato ...
Soluzione? l'imponibile lo calcolo DOPO aver calcolato l'ivato (doppio
passaggio quindi: imponibile => ivato => arrotondo => imponibile reale).
Stessa situazione come logica, no?
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.


Hai ragione, infatti ho impostato il discorso in maniera un pò
differente, e penso di essere arrivato ad un giusto compromesso.
Grazie per l'aiuto!
Thanks