gpt4 book ai didi

javascript - JavaScript 求和错误

转载 作者:行者123 更新时间:2023-12-03 08:24:33 34 4
gpt4 key购买 nike

我有一个表格,其中汇总了从零开始的值。

我得到的一些值是错误的。我正在使用.toFixed(2)向用户显示结果。

我使用console.log在内部查看总和:

> 0 - 70 = -70
> -70 + 1182 = 1112
> 1112 - 970 = 142
> 142 - 900 = -758
> -758 - 300 = -1058
> -1058 - 210 = -1268
> -1268 - 150 = -1418
> -1418 - 150 = -1568
> -1568 - 40 = -1608
> -1608 + 1182 = -426
> -426 - 450 = -876
> -876 - 39.6 = -915.6
> -915.6 + 1182 = 266.4
> 266.4 - 39.6 = 226.79999999999998
// the problem starts here to down
> 226.79999999999998 - 226.79 = 0.009999999999990905
> 0.009999999999990905 - 100 = -99.99000000000001
> -99.99000000000001 + 99.99 = -1.4210854715202004e-14
// this is the most crazy: '$ -99.99' plus '$ 99.99' gives '$ -1.42'
> -1.4210854715202004e-14 + 1.42 = 1.4199999999999857

如何解决这种情况?

<小时/>

@贝尔吉。我的代码:

$http.get('/app/php/planData.php').success(function(data){
for (var i=0, l=data.length; i<l; i++) {
var out = data[i].out;
var before = parseFloat(i ? data[i - 1].subtotal : 0);
var cash = parseFloat(data[i].cash);
data[i].subtotal = out ? before - cash : before + cash;
console.log(before + (out? ' - ' : ' + ') + cash + ' = ' + data[i].subtotal);
}
$scope.dataPlan = data;
loading('off');
}).error(function(){ console.log('Error searching Plan data.'); });

html:

<span style="color: {{mov.subtotal < 0 ? '#f00' : 
(mov.subtotal > 0 ? '#00f' : '#000')}}"
ng-bind="mov.subtotal | mymoney"></span>

过滤器:

appModule.filter('mymoney', function () {
return function (input) {
return input && ('$ ' + String(input).match(/^\-?\d+(?:\.\d\d?)?/)[0]);
};
});

最佳答案

this is the most crazy: '$ -99.99' plus '$ 99.99' gives '$ -1.42'

这不是真的,您得到的结果是:

-1.4210854715202004e-14

接近:

0.00000000000001421085...

(参见负指数)

为避免浮点问题,请在进一步使用之前尝试对总和进行舍入。发生这种情况是因为 float 在内存中的存储方式 - 如果您有兴趣更详细地了解该主题,可以找到大量有关该主题的在线资源。

关于javascript - JavaScript 求和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613394/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com