2012-03-29 13 views
9

Jak mogę zaokrąglić wartość z pola tekstowego z wynikiem parseFloat? Ta aplikacja w zasadzie podsumowuje wartość wszystkich przycisków radiowych po kliknięciu i wyświetla sumę w polu tekstowym.Jak zaokrąglić wyniki parseFloat w Jquery/Javascript?

Poniższy kod działa doskonale, jeżeli wartość przycisku radiowego jest liczbą całkowitą, jednak jeśli chcę mieć wartość zmiennoprzecinkową na przycisku radiowego, łączna wartość będzie miała 100.0000000679 gdy powinna być 100. Wszelkie wskazówki będą bardzo mile widziane. Z góry dziękuję.

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(); 
    }); 
}); 

HTML kod:

<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

wierzę znajdziesz to zastosowanie do własnych potrzeb [http : //stackoverflow.com/questions/4640404/parsefloat-rounding] [1] [1]: http://stackoverflow.com/questions/4640404/parsefloat-rounding – djmadscribbler

Odpowiedz

11

Początkowo myślę, że dostarczył nam inny przykład niż oczekiwano. Jeśli powiesz nam coś o uzyskaniu 100.0000000679, a Twój kod jest tylko wartością 1.6666666666666666666666666666667, coś jest nie tak :)

Mam nadzieję, że Twój problem dotyczy tylko prawidłowego obchodzenia okrążeń. W tym celu można użyć .toFixed()

Zobacz 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: Jeszcze raz dziękuję za uczynienie kolejny znaczący wkład do mojej pracy. Jak zawsze, byłeś bardzo szybki i główny przyczynek do mojej pracy. Twoje dane wejściowe zawsze były bardzo wowę za każdym razem, gdy wdrażam je do mojej pracy. Twoje rozwiązanie jest godne polecenia innym początkującym, takim jak ja. Dziękuję Ci. –

+0

@ Davinchie_214 bez problemu! Jestem tutaj zarejestrowany, aby pomóc ludziom. Ale jak zobaczyłem teraz, djmadscribbler dostarczył ci prawidłową wskazówkę. Być może następnym razem będziesz miał do tego większy wygląd. Gdyby tak było, to być może mógłbyś spróbować napisać, co się stało źle, robiąc to :) – Neysor

+0

Nawiasem mówiąc, Neysor, wartości, których użyłem powyżej, służą wyłącznie do celów symulacji. Zamierzam użyć tego w ten sposób, aby lepiej wyjaśnić, co chcę zrobić z powyższym pytaniem. Jeszcze jedno, całkowity wynik wyświetla tylko 99, kiedy powinien 100, gdy zmienię parseFloat z powrotem na parseInt. Czy to może być mała usterka, czy też mógłbym zrobić coś złego. Ale nie dajcie się pomylić, moje działa teraz, z wyjątkiem tego, że kiedy zmienię to na parseInt, program się nie powiedzie. Dzięki za wejście. –