Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:parseFloat计算不正确_Javascript_Jquery_Html - Fatal编程技术网

JavaScript:parseFloat计算不正确

JavaScript:parseFloat计算不正确,javascript,jquery,html,Javascript,Jquery,Html,我想这样,每次选中浇头复选框时,它都会通过添加额外的99便士来更新价格。除了用户选择3个复选框(0.99*3)并显示2.969999999998而不是2.97时,所有这些都可以正常工作 有什么问题吗 HTML: <label><b>Toppings (99p Each): &nbsp;</b></label><br> <input type="checkbox" name="onions">Onions</in

我想这样,每次选中浇头复选框时,它都会通过添加额外的99便士来更新价格。除了用户选择3个复选框(0.99*3)并显示2.969999999998而不是2.97时,所有这些都可以正常工作

有什么问题吗

HTML:

<label><b>Toppings (99p Each): &nbsp;</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>
try:parseFloatx.toFixed2如果需要其他内容,请告诉我。

try:parseFloatx.toFixed2如果需要其他内容,请告诉我。

用于将字符串转换为浮点值。与parseInt不同,parseFloat没有第二个参数

JavaScript实际上对int和float没有不同的类型,它们都是相同的,并且作为float存储在内部。parseFloat和parseInt之间的唯一区别是返回的值是否应该包含十进制组件

这里要使用的是,这里根本不需要parseFloat。没有需要解析的字符串

$('input[type=checkbox]').change(function(){
    var checked = $(":checkbox:checked").length;
    toppingCost = 0.99 * checked;

    var total = pizzaCost + toppingCost;
    $("#totalPrice").text(total.toFixed(2));
});
用于将字符串转换为浮点值。与parseInt不同,parseFloat没有第二个参数

JavaScript实际上对int和float没有不同的类型,它们都是相同的,并且作为float存储在内部。parseFloat和parseInt之间的唯一区别是返回的值是否应该包含十进制组件

这里要使用的是,这里根本不需要parseFloat。没有需要解析的字符串

$('input[type=checkbox]').change(function(){
    var checked = $(":checkbox:checked").length;
    toppingCost = 0.99 * checked;

    var total = pizzaCost + toppingCost;
    $("#totalPrice").text(total.toFixed(2));
});

浮点数很少是精确的。它们的工作原理是用最小可能的错误表示一个数字——有点像压缩。这与某些语言中的十进制数据类型形成对比,后者确实将每个数字存储为整数,甚至超过了十进制

浮点数越长,精度越高。大多数浮点是32位的变体,它有一个23位尾数(小数部分或精度)和一个8位指数,该指数基本上沿尾数移动浮点小数点

这对您来说意味着2.97不能在没有小误差的情况下用浮点表示。为了得到2.97,需要将结果四舍五入到2d.p。在JavaScript中,您可以使用

toppingCost.toFixed(2) 

浮点数很少是精确的。它们的工作原理是用最小可能的错误表示一个数字——有点像压缩。这与某些语言中的十进制数据类型形成对比,后者确实将每个数字存储为整数,甚至超过了十进制

浮点数越长,精度越高。大多数浮点是32位的变体,它有一个23位尾数(小数部分或精度)和一个8位指数,该指数基本上沿尾数移动浮点小数点

这对您来说意味着2.97不能在没有小误差的情况下用浮点表示。为了得到2.97,需要将结果四舍五入到2d.p。在JavaScript中,您可以使用

toppingCost.toFixed(2) 

这是一个想法,将数字乘以100,然后将结果除以100:0.99*100*3/100
这里有一个想法,将数字乘以100,然后将结果除以100:0.99*100*3/100
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);
});

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

用于将字符串转换为浮点值。与parseInt不同,它没有第二个参数。JavaScript实际上没有int和float的不同类型,它们都是相同的。所以,我什么都不做。这实际上会将checked转换为字符串,然后转换为float。See用于将字符串转换为float值。与parseInt不同,它没有第二个参数。JavaScript实际上没有int和float的不同类型,它们都是相同的。所以,我什么都不做。这实际上会将checked转换为字符串,然后再转换为floatradix@SterlingArcher不适用于哎哟!我一直在想,为什么还要一直呆在这里?我没有看到任何需要解析的字符串。实际上,没有使用任何字符串,我只是快速回答。我想一个通用的答案会启发OP使用.toFixed2,而不是给他家庭作业的答案。我有一个坏习惯,就是在学校作业上付出太多。@a老师,别忘了radix@SterlingArcher不适用于哎哟!我一直在想,为什么还要一直呆在这里?我没有看到任何需要解析的字符串。实际上,没有使用任何字符串,我只是快速回答。我想一个通用的答案会启发OP使用.toFixed2,而不是给他家庭作业的答案。我有一个坏习惯,在学校作业上付出太多。你可能会丢失checkedInt变量。parseFloatchecked,10是完全无用的。是的,您可以清理代码,我刚刚将其更改为工作,JQuery.length应该已经返回Int了
:所以这应该可以正常工作:total=pizzaCost++checked*toppingCost.toFixed 2可能会丢失checkedInt变量。parseFloatchecked,10是完全无用的。是的,你可以清理代码,我刚刚将它改为工作,JQuery.length应该已经返回一个Int:所以这应该可以正常工作:total=pizzaCost++checked*toppingCost.toFixed 2这是个好主意。你基本上用美分而不是美元来对待每件事。JSFIDLE中的语法分析器太多了。不知道为什么。你可以也应该把它们都丢掉。@RocketHazmat刚刚复制了这个问题,加上100,我把美元乘以100,换算成美分,把答案除以100,再换算成多拉。这是个好主意。你基本上用美分而不是美元来对待每件事。JSFIDLE中的语法分析器太多了。不知道为什么。“你可以也应该把它们都丢掉。”洛克塔斯马特抄写了这个问题,加上100,我把美元乘以100,换算成美分,把答案除以100,再换算成多拉