Newsgroup: it.comp.lang.javascript
Titolo: Formattazione decimali

Salve a tutti,
Ho trovato in rete loscript sottostante che mi permette di ottenere sempre
cifre con due decimali, ideali per la valuta EURO.
Ma ho un problema: quando mi porto all'interno della casella di testo con il
cursore, se in questa c'è già una cifra, quando mi sposto il contenuto della
casella mi diventa 0,00. Perchè? Spero di esseremi spiegato...
Ringrazio anticipatamente chi mi potrà aiutare,
Saluti, micky
********************
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function formatCurrency(num) {
num = num.toString().replace(/\|\,/g,'');
if(isNaN(num))
num = "0";
sign = (num == (num = Math.abs(num)));
num = Math.floor(num*100+0.50000000001);
cents = num%100;
num = Math.floor(num/100).toString();
if(cents<10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+'.'+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + num + ',' + cents);
}
</script>
</HEAD>
<BODY>
<form name=subform>
<input type=text name=input2 size=10 value=""
onchange="this.value=formatCurrency(this.value);">
</form>

 casella mi diventa 0,00. Perchè? Spero di esseremi spiegato...
Perche' funziona bene. :-)
Dato che si parla di euro i decimali sono significativi fino alla seconda 
cifra: lo zero che per le lire era semplicemente "0" per l'euro diventa 
"0.00"
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

> Perche' funziona bene. :-)
Grazie della risposta riccardo :-)
ma, prova a inserire una cifra, esci dalla texbox per poi rientrare in un
secondo momento. E proprio in questo caso che la cifra precedentemente
inserita diventa 0,00. Ho provato i vari eventi, pensando che "onchange"
evitasse proprio questo "azzeramento del textbox".
Grazie ancora per l'interessamento,
Saluti,. micky

Prova a sostituire quel replace (che è scritto secondo me in modo errato)
con
num = num.toString().replace(/,/g,".");

<input type=text name=input2 size=10 value=""
onchange="this.value=formatCurrency(this.value/1);">
Dividendo per uno un numero con la virgola come 0.00 diventa 0
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
abqsen$6qt$1...@fe2.cs.interbusiness.it...


, 
mic...@libero.it
 says...

Ah, ora ho capito.
Non ne esci e ti dico subito perche'.
se tu inserisci la prima volta 123456 la funzione te lo trasforma in 
1.234,56 che č una stringa per la presenza del carattere "virgola". 
Quando ripassi sul campo, anche se non modifichi, la funzione riprende il 
valore del campo per trasformarlo, ma non č piů un numero quindi scatta 
if (isNaN(num)) che lo ritrasforma in zero perche' e' come se invece di 
un numero scrivessi "pippo".
Non ti resta che eliminare la virgola e ritrasformarla in punto decimale.
Sostituisci la riga
num = num.toString().replace(/\|\,/g,'');
(che sembra sbagliata anche a me) con questa 
num = num.toString().replace(/\./g,"").replace(/,/g,'.');
La sequenza dei due replace prima elminia i punti e poi sostituisce la/le 
virgola/e con un punto. In questo modo "la cosa" che c'e' nel campo 
ridiventa un numero... a meno che non ci siano piu' di una virgola e 
salta tutto di nuovo, ma questo e' impossibile a meno che le virgole non 
le scrive l'utonto.


 num = num.toString().replace(/\./g,"").replace(/,/g,'.');
Perfetto Riccardo,
Grazie 1000 anche a te,
Saluti, micky