<input alt="Flyer|49.80" type="checkbox" class="price" id="cb3" name="price_3" />
<input alt="CMS|199.99" type="checkbox" class="price" id="cb1" name="price_1" />
嘿伙计们!
也许有人可以在我的来源中给我一点提示。 当我添加49.8 + 199.99时,它会增加0.000000002到我的总和。
感谢您的任何建议!
答案 0 :(得分:5)
您需要了解how floating point numbers work并将答案四舍五入到最接近的两位数。
简短的回答是,这就是JavaScript和所有使用浮点数的语言的工作原理。你无法“修复”它。您所能做的就是接受浮点数不精确并处理它。
答案 1 :(得分:3)
是的,正如@duffymo所提到的,问题与浮点数有关 - 具体来说,问题的根源(这不是JavaScript特有的)是 没有办法将0.1映射到有限二进制浮点数 。
答案 2 :(得分:2)
var val = 49.8 + 199.99;
alert(val.toFixed(2));
答案 3 :(得分:2)
问题是javascript将数字存储为64位浮点数。这意味着有一些补充,其中在十进制数学中将加到100.00的数字不会在浮点数学中。 有关更多信息,请参阅链接:
Is floating point math broken?
您可以通过将所有输入乘以100,添加它们,然后比较10,000来避免这种情况。这将起作用,因为2 ^ -52和2 ^ 52之间的所有整数都可以用双精度浮点数精确表示,但分数可能不是。 http://en.wikipedia.org/wiki/Double_precision_floating-point_format
另一种方法是滚动你自己的十进制加法函数来处理数字字符串。