Newsgroup: it.comp.lang.javascript
Titolo: Ancora sui prodotti....

<script>
function Calc() {
var costo = parseFloat(Form1.costoTerzi.value.replace(/\,/g,'.'));
var qt = parseFloat(Form1.quantita0.value.replace(/\,/g,'.'));
var totale = (costo * qt)
document.Form1.Anno1.value = totale
}
</script>
io mi fermo qui, ma ho 2 problemi:
- non riesco a gestire il messaggio d'errore quando viene inserito un
carattere (e l'inserimento automatico del numero zero in questo caso)
- il prodotto viene effettuato col "." e non col la ","
Grazie per l'aiuto

Nessuno che mi aiuta??
ma č un problema cosi anomalo??
Grazie in anticipo!

 ma è un problema cosi anomalo??
Il punto è che mi pare che DrJohn Stockton ti abbia già detto tutto quel
che c'è da dire in merito... basta applicare ciò che ti ha scritto.
-- 
ZER0
~ Legge dell'Amplificazione sonora
Nello spazio i rumori delle esplosioni si trasmettono ancora meglio perché
non c'è l'aria a trattenerli. (La Fisica nei Cartoni)

Io non capisco, ho provato a mettere in pratica quando indicato, ma il
replace sul totale non funziona...
non capisco dove applicarlo per visualizzare la "," invece del "."
<script>
function Calc() {
var costo = parseFloat(Form1.costoTerzi.value.replace(/\,/g,'.'));
var qt = parseFloat(Form1.quantita0.value.replace(/\,/g,'.'));
var totale = (costo * qt);
//var totale = totale.replace(/\./, ',');
document.Form1.Anno1.value = totale;
document.Form1.Anno1.value.replace(/\./, ',');
}
</script>
Grazie

 document.Form1.Anno1.value.replace(/\./, ',');
In questo modo assegni a "document.Form1.Anno1.value" il valore di
"totale", e con la riga successiva fai il "replace()", ma non stai
assegnando a niente il risultato di tale replace. Secondo la "tua logica",
avresti dovuto fare cosě:
document.Form1.Anno1.value = totale;
document.Form1.Anno1.value = document.Form1.Anno1.value.replace(/\./, ',');
Ovviamente č preferibile qualcosa di piů diretto:
document.Form1.Anno1.value = totale.toString().replace(/\./, ',');
se "totale" non lo usi altrove, potresti anche fare direttamente:
document.Form1.Anno1.value = (costo * qt).toString().replace(/\./, ',');
-- 
ZER0 
~ "Compiere l'impossibile e' impresa che risiede nel cuore degli uomini"
(Mariners and generals)

Grazie infinite per l'aiuto... ora è perfetta
ho anche inserito un controllo se vengono inseriti caratteri
<script>
function Calc() {
VerificaCostoTerzi = !/[^\d,\.]/.test(document.Form1.costoTerzi.value);
if (VerificaCostoTerzi)
 costo = +document.Form1.costoTerzi.value.replace(/\,/g,'.');
else
 {
 document.Form1.costoTerzi.value = 0;
 costo = 0;
 alert("Inserire un numero!")
 }
var qt = parseFloat(document.Form1.quantita0.value.replace(/\,/g,'.'));
var totale = (costo * qt);
document.Form1.Anno1.value = totale.toString().replace(/\./, ',');
//document.Form1.Anno1.value = (costo * qt).toString().replace(/\./, ',');
}
</script>
un ultimo problema:
se faccio un prodotto tra:
6 * 2,3 (ad esempio)
ottengo: 13,799999999999999999
come posso gestire solo due decimali nel totale??
Grazie ancora

 come posso gestire solo due decimali nel totale??
Usando il metodo toFixed() nei browser che lo supportano. Attento che tale
metodo è dell'oggetto number, non string, e ti restituisce una stringa (E
mi pare di ricordare che in IE5.5 - o meglio nello script engine 5.5 - il
metodo sia un po' bacato).
Altrimenti, vai di manipolazione di stringa a manina.
-- 
ZER0 
~ "E' bello essere vivi. Ci sono tante cose che non si possono fare
da morti."

 Usando il metodo toFixed() nei browser che lo supportano. 
http://www.criosoftware.it/default40.aspx
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 
http://www.criosoftware.it/default40.aspx
Se non ho riportato la mia funzione nel post, un motivo ci sarà. :)
La prima volta la scrissi al volo, non la testai adeguatamente. Adesso ci
ho rimesso mano, e ho notato che così com'è non va. La sto riscrivendo.
-- 
ZER0 
~ "L'arte non riproduce cio' che e' visibile,ma rende visibile cio' che
non sempre lo e'" (Paul Klee)

Sai dirmi se in IE 6.0 e successivi toFixed funziona correttamente??
Grazie

 Sai dirmi se in IE 6.0 e successivi toFixed funziona correttamente??
Relativamente. Ad esempio:
	0.008 => toFixed(2) => 0.00
Firefox invece:
	0.008 => toFixed(2) => 0.01
In altri casi invece funziona bene, tipo:
	0.078 => toFixed(2) => 0.08
-- 
ZER0 
~ Alcune persone sono ancora vive per il semplice motivo che e'
illegale ucciderle.

 ho rimesso mano, e ho notato che cosģ com'č non va. La sto riscrivendo.
:-O
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 TP/BP/Delphi/jscr/&c, FAQ items, links.

 :-O
La precedente aveva qualche "piccolo" problema con i numeri compresi tra 0
e 1...
Questa dovrebbe andare, ho risolto la questione con un workaround
teppistico lo ammetto, ma avendola scritta in preda a dolori febbrili e non
(credo che il mal di denti sia una delle torture più atroci), penso di
essere scusato... potrei anche aver fatto qualche cavolata, quindi se ti va
di dargli un'occhiata (a te e a chiunque altro) è ben accetta.
Number.prototype.toFixed=function(n){ 
	if (n>0){
		var sign=this<0?"-":"",num=Math.abs(this),m=(num>0 && num<1)?1:0;
		num+=m;
		num=new String(Math.round(num*new Number("1e+"+n))).replace(new
RegExp("(\\d+)(\\d{"+n+"})$"),"$1.$2");
 
		return sign+(m?"0"+num.substr(1):num);
	}else{
		return new String(Math.round(this)); 


On Thu, 21 Jul 2005 09:29:00 +0200, ZER0 wrote:
[cut]
Volendo, "sign" si può anche togliere:
Number.prototype.toFixed=function(n){ 
	if (n>0){
		var num=Math.abs(this),m=(num>0 && num<1)?1:0;
		num+=m;
 		num=new String(Math.round(num*new Number("1e+"+n))).replace(new
RegExp("(\\d+)(\\d{"+n+"})$"),"$1.$2");
 
 		return (this<0?"-":"")+(m?"0"+num.substr(1):num);
 	}else{
 		return new String(Math.round(this)); 
 	}
 }
l'avevo lasciato per "tracciarlo".
-- 
ZER0 
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere uno
o piu' ordigni nucleari" (ZER0 & Cosimo)

 Number.prototype.toFixed=function(n){ 
[CUT]
http://www.criosoftware.it/default40.aspx
Alla prima occasione poi me la testo ben bene.
grazie


 Alla prima occasione poi me la testo ben bene.
Io sarei quasi per farne l'override anche se esiste già; ovviamente una
volta fatto il testing a dovere.
Il punto è che il toFixed() di IE dà risultati diversi, talvolta. Facendo
l'ovverride correggi i suoi bug. Come accennavo nello stesso thread:
0.008 => toFixed(2) => 0.00
mentre sia FF che la mia funzione restituiscono 0.01.
-- 
ZER0 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 volta fatto il testing a dovere.
[CUT]
Ho aggiunto tale commento.
AriGrazie
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

}
        x = (0).toFixed(2)      ->      0       // :-(
        m=(num>0 && num<1)?1:0;         ->      m=(num>=0 && num<1)?1:0;
        x = (0).toFixed(2)      ->      0.00    // :-)
        m=(num>=0 && num<1)?1:0;        ->      m=(num>=0 && num<1)
        OK


         m=(num>=0 && num<1)?1:0;        ->      m=(num>=0 && num<1)
Eh, quando dico "potrei anche aver fatto qualche cavolata" è perché me lo
sento.. Danke. :)
-- 
~ "Nell'anno 1969 è bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 è
necessario un Pentium 4 a 2000 Mhz per far funzionare Windows XP.
Qualcosa deve essere andato storto."

 Ho aggiunto tale commento.
Aggiungi anche un segno di uguaglianza:
m=(num>0 && num<1)?1:0;
-- 
