我希望每次选中(浇头)复选框时,它都会额外添加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);
});
parseFloat
用于将字符串转换为浮点值。与parseInt
不同,parseFloat
没有第二个参数。
JavaScript实际上没有不同的int和float类型,它们都是相同的(并且作为float存储在内部)。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));
});
浮点数字很少是精确的。它们通过表示一个误差最小的数字来工作——有点像压缩。这与某些语言中的Decimal数据类型形成了鲜明对比,后者确实像整数一样存储每个数字,甚至超过了小数。
浮点值越长,它就越精确。大多数浮点值是IEEE 754标准的32位变体,它有一个23位尾数(小数部分或精度)和一个8位指数,它基本上沿着尾数移动"浮动"小数点。
这对您来说意味着2.97不能在没有小误差的情况下用浮点表示。为了得到2.97,你需要将结果四舍五入到2d.p。在JavaScript中,你可以使用来实现这一点
toppingCost.toFixed(2)
这里有一个想法,将数字乘以100,然后将结果除以100:0.99*100*3/100
https://jsfiddle.net/qp21bpbs/1/
try:parseFloat(x).toFixed(2)
如果您需要其他东西,请告诉我。
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);
});