Ricerca tra la vecchia roba

Arrotondare in Javascript

Posted: Giugno 9th, 2007 | Author: | Filed under: Programmazione | Commenti disabilitati su Arrotondare in Javascript

Oggi sono in vena di codici: il javascript è un linguaggio di merda ma purtroppo lo devo utilizzare per "lavoro": in certe pagine devo creare delle select con un elenco di valori numerici che devono avere 2 cifre di precisione ma, il problema consta nel fatto che questo linguaggio arrotonda in maniera penosa.

 

 Per ovviare a questo ho girovagato on the web e ho scoperto la pagina delle specifiche javascript per i browser alla mozilla (in realtà avrei dovuto leggerla prima) da cui sono venuto a conoscenza dell'esistenza del metodo toFixed() nella classe Number che fa proprio al caso mio.

Quindi come sempre, il codice è meglio di 1000 parole:

<html>
        <head>
                <title>Javascript's rounding numbers approach</title>
        </head>
<body style="font-size:12px;">
        <script type="text/javascript">
        function make_select(elenco){
                var select = document.createElement('select');
                for(var i =0 ; i<elenco.length ; i++){
                        var option = document.createElement('option');
                        option.innerHTML = elenco[i];
                        option.value = elenco[i];
                        select.appendChild(option);
                }
                return select;
        }

        function gestisci_numero(incremento,precisione,inizio,fine){
                var Inc = new Number(incremento);
                var Prec = new Number(precisione);
                var output = new Array();
                n = new Number(inizio); ;
                for(var i=0; n<fine;i++){
                        output[output.length] = n.toFixed(Prec);
                        n += Inc;
                }
                return output;
        }

        function get_arguments(){
                var incremento = document.getElementById('incremento').value;
                var precisione = document.getElementById('precisione').value;
                var start = document.getElementById('start').value;
                var end = document.getElementById('end').value;
                document.getElementById('generated').appendChild(make_select(gestisci_numero(incremento,precisione,start,end)));
        }
        </script>
        Incremento<input type="text" id="incremento"/>
        Precisione<input type="text" id="precisione"/>
        Start<input type="text" id="start"/>
        End<input type="text" id="end"/>
        <div id="button" onclick="get_arguments();">esegui -&gt;</div>
        <div id="generated"></div>
</body>
</html>

Il motivo per cui trasformo gli argomenti della funzione gestisci_numero in elementi della classe Number sta nel fatto che altrimenti non funziona ๐Ÿ˜‰ cioé probabilmente gli argomenti di una funzione javascript sono considerati o stringhe (forse perché vengono da una input?) o oggetti generici e mi esce errore (mi uscisse il cane sarebbe meglio) siccome per loro non è implementata il metodo toFixed().

La pagina ammetto che è una merda e non rispetta le specifiche (don't try this at home) ma risulta funzionale al suo scopo: gratis la funzione per creare una select a partire da un array di valori. Qualcuno batta un colpo se (non) funziona o pensa che si possa fare meglio.


Comments are closed.