【发布时间】:2015-10-13 12:47:20
【问题描述】:
现在我正在开发一个网络应用程序中的分类帐类型程序。我正在使用 angularJS 来处理事件,但它是处理实际计算的原始 Javascript
var onEntriesSuccess = function(data) {
var sum = 0;
var isDebit = ($scope.account.active == "D" ? true : false);
angular.forEach(data, function(value, key){
sum += (isDebit ? value.debit - value.credit : value.credit - value.debit);
value.balance = sum;
});
$scope.entries = data;
}
这似乎工作正常;但是,在针对我的测试用例运行它时,我发现它失败了,因为当 sum = 10496.82 并尝试减去 6912.00 时,它会出现
3584.8199999999997
我以前从来没有遇到过这样的错误,一开始我以为是浮点数,将值从6912.02切换到6912.00。但是,这似乎并不能解决任何问题。谁能解释一下?谢谢
【问题讨论】:
-
你能做个小提琴吗?
-
无需费神,这是由于javascript使用浮点数系统造成的:stackoverflow.com/questions/1458633/…
-
您可以通过
0.1+0.2 == 0.3轻松重现它,这将导致错误,因为 JS 中0.1+0.2的实际结果将再次为 0.3000...4 这是由于 JS 使用的数字系统 -
考虑使用
value.balance = Math.round(sum * 100) / 100;(==3584.82) 可能是 javascript 中这种浮点“怪异”的最佳解决方法。 -
Fiddle : link 确实,如果它减去一个十进制值而不是 6912.00 确实有意义。如果我进行修改以使数字产生 8496.82 - 912.00 则没有浮点数:/
标签: javascript angularjs random infinite