Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822

    JS formattare le migliaia con la virgola

    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 :-(

  2. #2
    Una ricerchina su Google con la stringa di ricerca: "Javascript format currency" ha prodotto:
    codice:
    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;
    }
    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  3. #3
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Mitico ! Funziona !

    Grazie !!!
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150

    problema inverso

    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



  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    667
    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>

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150

    non funziona

    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?


  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    667
    se aggiungi una function simile
    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>
    il numero anche se lo metti con 123456 viene convertito con punti e virgola.

    in insert/update replace del punto

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    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 "."

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150

    sorry...

    in visualizzazione utilizzo la formattazione numerica di asp

    formatnumber(variabilenumerica,2)

    quindi dovrei aver risolto


  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150

    altro problema...

    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
    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;
        }
    }
    Ora se vado ad applicare al campo IMPO_AVVI,
    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


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.