【问题标题】:Javascript random infinite numbersJavascript随机无限数
【发布时间】: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


【解决方案1】:

我更新了你的小提琴

Live Link

sum=parseFloat(sum.toPrecision(16))

我的解决方案来自:

Stack overflow Answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2010-11-10
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多