Мне бы хотелось, чтобы каждый раз, когда установлен флажок (toppings), он обновляет цену, добавляя дополнительно 99 пенсов. Все работает отлично, за исключением случаев, когда пользователь выбирает 3 флажка (0,99 * 3) и отображает 2.9699999999999998
вместо 2.97JavaScript: parseFloat неверно вычисляется
Какие-либо идеи о том, что не так?
HTML:
<label><b>Toppings (99p Each): </b></label><br>
<input type="checkbox" name="onions">Onions</input><br>
<input type="checkbox" name="mushrooms">Mushrooms</input><br>
<input type="checkbox" name="peppers">Peppers</input><br>
<input type="checkbox" name="olives">Olives</input><br>
<input type="checkbox" name="garlic">Garlic</input><br>
<input type="checkbox" name="xtra-cheese">Xtra Cheese</input><br>
<input type="checkbox" name="peperoni">Peperoni</input><br>
JavaScript:
var pizzaCost = 0.00;
var toppingCost = 0.00;
$('input[type=checkbox]').change(function(){
var checked = $(":checkbox:checked").length;
var checkedInt = parseFloat(checked, 10);
var temp = (0.99 * checkedInt);
toppingCost = parseFloat(temp);
var total = pizzaCost + toppingCost;
$("#totalPrice").text(total);
});
[ 'parseFloat'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) используется для преобразуйте * строку * в значение float. В отличие от 'parseInt', он * не имеет 2-го параметра. JavaScript фактически не имеет разных типов для int и floats, они одинаковы. Итак, 'parseFloat (checked)' does * nothing *. Это фактически преобразует 'checked' в * строку *, а затем в float. –