Ciao
ho un numero decimale del tipo 3500.00. Mi piacerebbe che fosse formattato nel seguente modo : 3,500.00
E' possibile con JS ?
Ciao
ho un numero decimale del tipo 3500.00. Mi piacerebbe che fosse formattato nel seguente modo : 3,500.00
E' possibile con JS ?
TORTA DI RISO .. F I N I T A !!
Da M.C.S.A. a impiegato pubblico :-(
Una ricerchina su Google con la stringa di ricerca: "Javascript format currency" ha prodotto:
HTHcodice:function CommaFormatted(amount) { var delimiter = ","; // replace comma if desired var a = amount.split('.',2) var d = a[1]; var i = parseInt(a[0]); if(isNaN(i)) { return ''; } var minus = ''; if(i < 0) { minus = '-'; } i = Math.abs(i); var n = new String(i); var a = []; while(n.length > 3) { var nn = n.substr(n.length-3); a.unshift(nn); n = n.substr(0,n.length-3); } if(n.length > 0) { a.unshift(n); } n = a.join(delimiter); if(d.length < 1) { amount = n; } else { amount = n + '.' + d; } amount = minus + amount; return amount; }
Zappa
[PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
[Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]
Mitico ! Funziona !
Grazie !!!
TORTA DI RISO .. F I N I T A !!
Da M.C.S.A. a impiegato pubblico :-(
Io invece avrei un altro problema, sempre legato a questa cosa delle migliaia.
Sul db l'importo è
123456789.33
In visualizzazione diventa
123456789,33
E chiaramente quando lo inserisco, faccio (con una funzione sql) la replace della "," con il "."
Inoltre prima di inserire faccio il controllo numerico (con Javascript) sull'importo che mi esclude anche i ".", oltre alle lettere e agli altri caratteri
Questo è solo per spiegarvi come sto "messo"![]()
Ora, il cliente vuole in visualizzazione così
123.456.789,33
Chiaramente i "." delle migliaia posso essere da 1 a 3/4
La questione è questa.
Come faccio, nella mia struttura, a far accettare in visualizzazione (e quindi nell'eventuale modifica) un valore numerico con i "."?
Pensavo
1) Modificare il controllo numerico, escludendo il carattere "." tra quelli non consentiti, e fare una replace sostituendo "." con NULL (ma così se per caso l'utente scrive 123456789.33 sono fregato)
2) Nella funzione di controllo javascript , sostituire "." con NULL e popolare in automatico un altro campo, che userò esclusivamente per l'inserimento dell'importo, "pulito" dei "."
Ovvero, avrò un campo in visualizzazione (che presenta i punti) e un campo nascosto che non li presenta.
La soluzione 2) comporta però ritoccare almeno una 30ina di form (1/2 progetto)...che mi consigliate in alternativa!??!
Considerando che lo devo terminare per domani mattina alle 9, credo che non ce la farò mai![]()
![]()
prova this
codice:<HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <TITLE></TITLE> <SCRIPT LANGUAGE=javascript> <!-- function Pulisci(val) { s_val = new String(val); RE = /[^\d|\.,]/gi s_val = s_val.replace(RE,""); RE = /\./gi; s_val = s_val.replace(RE,""); s_val = s_val.replace("\,","\."); return s_val; } function Formatta_num(val,dec,sep,cmp){ s_val = Pulisci(val); a_val = s_val.split("."); intero=a_val[0]; l_val = intero.length; var i = 3; while (l_val - 3 > 0){ var l_val1 = intero.length; var s1 = intero.slice( l_val1 - i , l_val1 ); var s2 = intero.slice(0 , l_val1 - i ); intero = s2+"."+s1; i = i +4; l_val = l_val - 3; } if (cmp) { if(a_val.length>1) { s1 = String(a_val[1]) while (s1.length<dec) { s1 = s1+"0"; } } else { s1 = "00" } intero = intero + sep + s1.substr(0,dec); } else { if(a_val.length>1) { s1 = String(a_val[1]) if (s1.length>dec) { s1 = s1.substr(0,dec-1)+s1.substr(dec,1) } intero = intero + sep + s1; } } return (intero); } //--> </SCRIPT> </HEAD> <BODY> <FORM action="" method=get id=form1 name=form1> <INPUT type="text" id=text1 name=text1 onKeyUp="this.value=Formatta_num(this.value,2,',',false);" onBlur="this.value=Formatta_num(this.value,2,',',true);"> </FORM> </BODY> </HTML>
Se ho capito bene, mentre scrivo mi inserisce in automatico i "." delle migliaia e quando faccio salva (anche se non ho inserito le migliaia) mi mette in automatico 2 valori decimali (in questo caso ",00") , separando gli interi dai decimali appunto.
1^ problema. Se l'importo già esiste, non posso andare a modificare solo un numero, ma devo riscrivere tutto da capo
2^ quando vado in inserimento mi va in errore, perchè trova il "." e quindi un carattere non numerico, come invece dovrebbe essere (in tabella il campo è Number)
Dove sto sbagliando?
![]()
se aggiungi una function simile
il numero anche se lo metti con 123456 viene convertito con punti e virgola.codice:<FORM action="" method=get id=form1 name=form1> <INPUT type="text" id=text1 name=text1 onKeyUp="this.value=Formatta_num(this.value,2,',',false);" onBlur="this.value=Formatta_num(this.value,2,',',true);" value="123456879,10"> </FORM> <script> document.forms[0].text1.value=Formatta_num(document.forms[0].text1.value,2,',',true); </script>
in insert/update replace del punto
Non posso fare in update replace del punto, perchè in locale il mio db è in italiano, quindi "," passa e potrei anche fare quello che dici te, mentre in esercizio il db è in inglese e già viene fatta la replace della "," con il punto .
![]()
però se faccio prima replace del "." con niente (come si fa?) e poi replace della "," con "." forse funziona lo stesso.
Inoltre, in visualizzazione come faccio a far vedere l'importo con il "." delle migliaia senza modificarlo che modifico il valore?
Che ne pensate?
![]()
ps1) comunque se possibile vorrei evitare di fare la replace del "." sulle procedure di inserimento del db. Vorrei risolvere tutto da asp/javascript :rollo:
ps2) ho già provato con la replace del "." con NULL e sul db Italiano funziona (e quindi anche su quello inglese, aggiungendo di nuovo la replace di "," con "."
in visualizzazione utilizzo la formattazione numerica di asp![]()
formatnumber(variabilenumerica,2)
quindi dovrei aver risolto![]()
![]()
stavolta il problema è legato a calcoli con Javascript
In una form eseguo attualmente questa procedura sul campo
codice:<input READONLY type="hidden" maxlength="12" name="IMPO_AVVI" value="<%=rs("IMPO_avvi_visu")%>" size="16" class="campiREADONLYimpo"> .... .... <input type="text" maxlength="12" name="IMPO_RIBA" value="<%=rs("IMPO_RIBA_visu")%>" size="16" class="campinullimpo" onchange="javascript:controlloimporti(document.datiform.IMPO_RIBA.value, document.datiform.IMPO_AVVI.value); calcolopercriba(document.datiform.IMPO_AVVI.value,document.datiform.IMPO_RIBA.value) "> <input type="text" maxlength="12" name="PERC_RIBA" value="<%=rs("PERC_RIBA_visu")%>" size="6" class="campinullimpo" onchange="javascript:controlloincrociato(document.datiform.PERC_RIBA.value, document.datiform.IMPO_RIBA.value)">
dove le funzioni indicate sono le sequenti
Ora se vado ad applicare al campo IMPO_AVVI,codice:function controlloimporti(camporiba,campoavvi) { camporibaconpunto = new String(camporiba); camporibaconpunto = camporibaconpunto.replace(",","."); CheckNumNewRiba = parseFloat(camporibaconpunto); if(isNaN(CheckNumNewRiba)) { alert("Attenzione !!! Il valore del campo Importo Ribasso deve essere un numero"); camporiba.focus(); return false; } campoavviconpunto = new String(campoavvi); campoavviconpunto = campoavviconpunto.replace(",","."); CheckNumNewAvvi = parseFloat(campoavviconpunto); if(isNaN(CheckNumNewAvvi)) { alert("Attenzione !!! Il valore del campo Importo Base d'Asta deve essere un numero"); campoavvi.focus(); return false; } return true; } function calcolopercriba(impoavvi,imporiba) { impoavviconpunto = new String(impoavvi); impoavviconpunto= impoavviconpunto.replace(",","."); imporibaconpunto = new String(imporiba); imporibaconpunto= imporibaconpunto.replace(",","."); diffavviriba = Number(impoavviconpunto)- Number(imporibaconpunto); document.datiform.PERC_RIBA.value = Math.round(((diffavviriba * 1000)/(impoavviconpunto))*100)/1000; document.datiform.PERC_RIBA.value = document.datiform.PERC_RIBA.value.replace(".",","); return true; } function controlloincrociato(percriba,imporiba) { imporibatemp = new String(imporiba); if (imporibatemp != 0) { alert("Attenzione!! Non e' possibile inserire la Percentuale Ribasso se il campo Importo Ribasso e' diverso da 0"); document.datiform.IMPO_RIBA.value=0; return false; } }
1) il formatnumber(xxxx,2)
2) onKeyUp e onBlur
nel campo Perc_Riba mi inserire NANA (ovvero, esegue un calcolo tra stringhe non numeriche)
Non riesco a trovare però dov'è l'errore![]()
![]()