2012-03-29 11 views
9

Come arrotondare un valore da un campo di testo con un risultato parseFloat? Questa applicazione riassume il valore di tutti i pulsanti di opzione quando si fa clic e visualizza la somma in una casella di testo.Come arrotondare parseFloat risulta in Jquery/Javascript?

Il seguente codice funziona perfettamente se il valore pulsante radio è un numero intero, se voglio avere un valore in virgola mobile sul pulsante, il valore totale avrà un 100.0000000679 quando dovrebbe essere 100. Qualsiasi consiglio sarebbe molto apprezzato. Grazie in anticipo.

function calcscore(){ 
    var score = 0; 
    $(".calc:checked").each(function(){ 
    score+=parseFloat($(this).val(),10); 
    }); 
    $("input[name=openingsum]").val(score); 
} 
$().ready(function(){ 
    $(".calc").change(function(){ 
     calcscore(); 
    }); 
}); 

codice HTML:

<input class="calc" name="v2" type="radio" onclick="ver2(this);" value="1.6666666666666666666666666666667" />Yes 
<input class="calc" name="v2" type="radio" onclick="ver2(this);" value="0" />No 
+1

credo troverete questo applicabili alle proprie esigenze [http : //stackoverflow.com/questions/4640404/parsefloat-rounding [1] [1]: http://stackoverflow.com/questions/4640404/parsefloat-rounding – djmadscribbler

risposta

11

In un primo momento penso che ci ha fornito un esempio diverso, allora previsto. Se ci dici qualcosa su come ottenere 100.0000000679 e nel tuo codice è solo un valore di 1.6666666666666666666666666666667 c'è qualcosa di sbagliato :)

Quindi spero che il tuo problema sia solo quello di arrotondare nel modo corretto. Per questo si può utilizzare .toFixed()

Vedere la example on jsfiddle

HTML:

<input class="calc" name="v1" type="radio" onclick="ver2(this);" value="1.6666666666666666666666666666667" />Yes 
<input class="calc" name="v1" type="radio" onclick="ver2(this);" value="0" />No 
<br> 
<input class="calc" name="v2" type="radio" onclick="ver2(this);" value="1.6666666666666666666666666666667" />Yes 
<input class="calc" name="v2" type="radio" onclick="ver2(this);" value="0" />No 
<br> 
<input class="calc" name="v3" type="radio" onclick="ver2(this);" value="1.6666666666666666666666666666667" />Yes 
<input class="calc" name="v3" type="radio" onclick="ver2(this);" value="0" />No 
<br> 
<input type="text" name="openingsum">​ 

JavaScript:

function calcscore(){ 
    var score = 0; 
    $(".calc:checked").each(function(){ 
    score+=parseFloat($(this).val(),10); 
    }); 
    score = score.toFixed(2); 
    $("input[name=openingsum]").val(score); 
} 
$().ready(function(){ 
    $(".calc").change(function(){ 
     calcscore(); 
    }); 
});​ 
+0

Neysor: Grazie ancora una volta per fare un altro significativo contributo al mio lavoro. Come sempre, sei stato molto sollecito e uno dei principali contributori al mio lavoro. I tuoi input sono sempre stati un momento stupefacente ogni volta che l'ho implementato nel mio lavoro. La tua soluzione è molto utile raccomandare ad altri neofiti come me. Grazie. –

+0

@ Davinchie_214 nessun problema! Sono qui registrato per aiutare le persone. Ma come ho visto ora, djmadscribbler ti ha fornito il suggerimento giusto. Forse la prossima volta ne avrai uno più grande. Se lo avessi, forse potresti provare a scrivere ciò che è successo di sbagliato mentre lo facevi :) – Neysor

+0

A proposito di Neysor, i valori che ho usato sopra sono solo a scopo di simulazione. Intendo utilizzarlo in questo modo, così posso spiegare meglio cosa voglio accadere alla domanda di cui sopra. Ancora una cosa, il punteggio totale mostra solo 99 quando dovrebbe 100 quando ho cambiato parseFloat indietro a parseInt. Potrebbe essere un piccolo problema o avrei potuto fare qualcosa di sbagliato di nuovo. Ma non essere confuso, il mio funziona ora tranne che quando lo cambio in parseInt, il programma va storto. Grazie per l'input. –