Прямо сейчас я работаю над программой типа бухгалтерской книги в веб-приложении. Я использую 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;
}
Что, кажется, работает нормально; однако при запуске его в моем тестовом примере я обнаружил, что он терпит неудачу, потому что, когда сумма = 10496,82 и попытки вычесть 6912,00, получается
3584.8199999999997
Я никогда раньше не сталкивался с такой ошибкой, сначала я подумал, что это ошибка с плавающей запятой, и поменял значение с 6912,02 на 6912,00. Однако, похоже, это ничего не исправляет. Кто-нибудь может объяснить это? Спасибо
0.1+0.2 == 0.3
, что приведет к ложному результату, поскольку фактический результат0.1+0.2
в JS будет 0,3000...4, опять же, это связано с системой счисления, которую использует JS - person Saar   schedule 13.10.2015value.balance = Math.round(sum * 100) / 100;
(==3584.82), вероятно, лучшего обходного пути для такого рода странностей с плавающей запятой в javascript. - person davidkonrad   schedule 13.10.2015(Math.round(parseFloat(num) * 100) / 100).toFixed(2)
см. различные примеры на jsfiddle.net/z18pmfkq . - person davidkonrad   schedule 13.10.2015