32.48 * 10 = 324.79999999999995 in javascript calculations
32.48 * 10 = 324.79999999999995 in javascript calculations
var quantity = $(this).find('td:eq(2) input').val()*1;
var unitprice = $(this).find('td:eq(3) input').val()*1;
var totaltax = 0;
$(this).find('td:eq(4) input[name^=taxamount]').each(function(){
totaltax = (totaltax*1)+($(this).val()*1);
});
var subtotal = (unitprice+totaltax);
alert(subtotal+' is unit subtotal, to mulitply by '+quantity);
var total = subtotal*quantity;
$(this).find('td:last').html('$'+total);
在本例中,根据我的DOM,结果都是整数(特别是因为我要确保对值应用*1修饰符,以确保它们是数字,而不是字符串)。
在本例中,这些是在上述代码的前7行中返回的值(并通过alert命令进行验证)数量:10unitprice: 29totaltax: 3.48小计= 32.48
当我将subtotal*quantity乘以总变量时,总收益:总:324.79999999999995
所以在最后,我得到的td:最后填充的是$324.79999999999995,而不是$324.80,这更正确。
我知道这很奇怪。我在不同的地方尝试了各种各样的警报,以确保没有错误等。这个问题已经问过无数次了。
请阅读:每个计算机科学家都应该知道的浮点算术
您遇到了一个熟悉的浮点值问题:某些值不能用有限的二进制浮点数精确表示。
看到:
如何处理JavaScript中的浮点数精度?
这就是浮点数的工作方式。这里没有什么奇怪的。
这就是浮点运算的乐趣所在——有些以10为基数的小数不能用二进制表示。
http://en.wikipedia.org/wiki/Floating_point Accuracy_problems
计算机不能很好地处理二进制的小数,因为在真正的数学中,从0.01到0.02之间的值实际上是无限多的。所以它们需要存储近似值,当你对这些近似值进行算术运算时,结果可能会与真实结果有一点偏差。
你可以用(Math.round(total*100)/100).toFixed(2);
正如其他人提到的,这就是它的工作方式。建议的解决的方法如下:
var v = "324.32999999999995";
function roundFloat(n, d) {
var a= Math.pow(10, d);
var b= Math.round(n * a) / a;
return b;
}
$("body").append(roundFloat(v,3));
其中v
将被替换为期望的值。
您可以查看工作示例:http://jsfiddle.net/QZXhc/
您可以尝试四舍五入到2位小数作为解决方法
- Node.js's Buffer.writeFloatBE in Javascript
- Setting default onclick behavior for <img> tag in gene
- Lucene Search in Alfresco
- grep in JQuery to C#
- write HTML in JavaScript
- jQuery setTimeOut: in for-loop
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- HTMLInputElement in IE7
- Mongodb$in以与数组中相同的顺序获取结果
- element.dataset in Internet Explorer
- jQuery parent() in table
- Instagram oauth flow in angularjs
- In循环的In运算符前后
- 如何使用for in循环在javascript中显示对象中的对象
- Jquery change onchange in onload
- 重构 jQuery in JS 问题
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- TicTacToe minimax AI in Javascript
- 32.48 * 10 = 324.79999999999995 in javascript calculations