Arrotondare in Javascript
Posted: Giugno 9th, 2007 | Author: packz | Filed under: Programmazione | Commenti disabilitati su Arrotondare in JavascriptOggi 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 -></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.