我希望每次选中(浇头)复选框时,它会通过添加额外的99便士来更新价格。一切正常,除非用户选择3个复选框(0.99 * 3)并显示2.9699999999999998
而不是2.97
关于什么是错的任何想法?
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);
});
答案 0 :(得分:4)
parseFloat
用于将字符串转换为浮点值。与parseInt
不同,parseFloat
不具有第二个参数。
JavaScript实际上没有针对整数和浮点数的不同类型,它们都是相同的(并在内部存储为浮点数)。 parseFloat
和parseInt
之间的唯一区别是返回的number
是否应该包含小数部分。
您要在此处使用的是toFixed()
,此处根本不需要parseFloat
。您无需解析字符串。
$('input[type=checkbox]').change(function(){
var checked = $(":checkbox:checked").length;
toppingCost = 0.99 * checked;
var total = pizzaCost + toppingCost;
$("#totalPrice").text(total.toFixed(2));
});
答案 1 :(得分:1)
浮点数很少是准确的。它们通过表示具有最小可能错误的数字来工作 - 有点像压缩。这与某些语言中的Decimal数据类型形成对比,这些数据类型确实存储了每个数字,如整数,甚至超过了小数。
浮子越长,它就越精确。大多数浮点数是IEEE 754 standard的32位变体,它具有23位尾数(小数部分或精度),以及一个8位指数,它基本上移动了#34;浮动&#34;沿着尾数的小数点。
这对您来说意味着2.97不能用浮点数表示,没有很小的误差。为了得到2.97,你需要将结果舍入到2d.p.在JavaScript中,您可以使用
执行此操作toppingCost.toFixed(2)
答案 2 :(得分:1)
这是一个想法将数字乘以100然后将结果除以100:0.99*100*3/100
https://jsfiddle.net/qp21bpbs/1/
答案 3 :(得分:0)
尝试:parseFloat(x).toFixed(2)
如果您需要其他内容,请告诉我。
答案 4 :(得分:0)
parseFloat是将字符串解析为浮点值,以获得一些你应该使用toFixed的格式化浮点数,如下所示:
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 = +temp.toFixed(2); // Assuming 2 decimals
var total = pizzaCost + toppingCost;
$("#totalPrice").text(total);
});