Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19

Discussione: formattare cifra

  1. #11
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    ok, accetto la sfida

    mo' ce provo
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  2. #12
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    andiamo per gradi:

    ora la funzione è parametrica (il secondo argomento della funzione è il numero di decimali):

    codice:
    <html>
    <head>
    <script>
    function format(number, dec) {
        
        
        while (number.length < dec + 1)  
            number = "0" + number;
        
           
        var re_decimal  = new RegExp ("(\\d*?)(\\d{" + dec +"})$");
        var re_fixed    = new RegExp ("(\\d*?)(\\d{3})$");
        
        formatted = number.replace(re_decimal, ",$2");
        number = number.replace(re_decimal, "$1");
    
        while (number.length > 3) {
          formatted = number.replace(re_fixed, ".$2") + formatted;
          number = number.replace(re_fixed, "$1");
        }
       
        formatted = number + formatted;
        return formatted;
    
    }
    </script>
    </head>
    <body>
    <script>
    document.write(format("12345678",3));
    </script>
    </body>
    </html>
    ora mi domando come posso fare due replace in una sola istruzione. Cmq ottimizzare questa funzione ancora di più mi riesce difficile... anche facendo come hai detto tu al massimo risparmio 2 righe.
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #13
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    la seconda funzionalità si può fare nel seguente modo (forse quello che intendeva mich_) :

    1) Ci sono istruzioni in più, di cui 1 dentro il while
    2) L'uso delle espressioni regolare si dimezza (circa)

    Dopodichè mi fermo qui...

    codice:
    <html>
    <head>
    <script>
    function format(number, dec) {
        
        
        while (number.length < dec + 1)  
            number = "0" + number;
        
        var formatted = "";
        var decimal  = new RegExp ("(\\d*?)(\\d{" + dec +"})$");
        var fixed    = new RegExp ("(\\d*?)(\\d{3})$");
         
        split = decimal.exec(number);
        
        if (split[2].length > 0) {
            formatted = "," + split[2];
        }
        number = split[1];
        
        while (number.length > 3) {
          split = fixed.exec(number);
          formatted = "." + split[2] + formatted;
          number = split[1];
        }
       
        formatted = number + formatted;
        return formatted;
    
    }
    </script>
    </head>
    <body>
    <script>
    document.write(format("123456789", 4));
    document.write("
    ");
    document.write(format("123456789", 0));
    </script>
    </body>
    </html>

    Altre possibili (e più veloci) soluzioni??
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  4. #14
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Il risparmio non e` tanto nelle righe, ma nel lavoro: la RegExp ha necessita` di un interprete a parte.

    Quindi:
    var estr = number.match(re_fixed);
    formatted = estr[1] + formatted;
    number = estr[0];

    Nota: non lo ho provato.

    EDIT: ho postato prima di vedere la tua soluzione ultima. Potrebbe funzionare anche la tua, ma la mia la preferisco (e` piu` esplicito il riferimento alla RegExp).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #15
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    prova l'ultimo esempio che ho postato...
    attenzione però che nel tuo esempio, l'array con indice 0 rappresenta __tutta__ la stringa... con JS si parte da 1
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #16

    con onkeyup

    Ciao a tutti se volessi usare la funzione di formattazione durante la digitazione !!!

    Mi spiego meglio o provato a chimare la funzione sotto ogni volta che un utente preme un tasto per formattare ad ogni digitazione il contenuto del campo... MA SCOPPIA TUTTO !!! :master:

    <script>
    function format(number) {

    number = String(number);

    while (number.length < 3) {
    number = "0" + number;
    }

    formatted = number.replace(/\d*?(\d{2})$/, ",$1");
    number = number.replace(/(\d*?)\d{2}$/, "$1");

    while (number.length > 3) {
    formatted = number.replace(/\d*?(\d{3})$/, ".$1") + formatted;
    number = number.replace(/(\d*?)\d{3}$/, "$1");
    }

    formatted = number + formatted;
    return formatted;

    }
    </script>


    GRAZIE A TUTTI

  7. #17
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Benvenuto nel forum

    C'e' una discussione sull'argomento "script migliaia" poche righe sotto e piu' recente.

    Ti invito anche a prendere visione del regolamento.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #18
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214

    Re: formattare cifra

    Originariamente inviato da
    Come si può formattare una cifra da:

    1356089415 in 13.560.894,15
    a me servirebbe una funzione che faccia il contrario, ossia da 13.560.894,15 a 13560894.15 giusto per riportare l'esempio

  9. #19
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    risultato = string.replace(/\./g,"").replace(/\,/,"\.")

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

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.