Моя функция регистрации ca sh всегда забывает регистрировать последний цент, если цена или указанное ca sh не является целым числом - PullRequest
0 голосов
/ 05 августа 2020

Это в то время как l oop по существу находит лучшую единицу валюты для возврата клиенту, учитывая то, что находится в ящике, и добавляет ее в массив изменений.

    while (difference > 0) {
        var unit = Object.keys(currency).reverse().reduce((output,prop)=>{
            if (difference >= currency[prop] && cid[prop] >= currency[prop]) {
                output.push(prop, currency[prop]);
            } else {}
            return output;
        }, []);
        cid[unit[0]] -= unit[1];
        difference -= unit[1];
        change.push(unit);
    }
  • cid составляет ca sh в ящике
  • Элемент списка

разница - принц минус ca sh

Я мог бы явно обмануть, но предпочтительнее было бы лучшее решение .

1 Ответ

0 голосов
/ 05 августа 2020

Как упоминал Пойнти в комментариях, JavaScript на самом деле не предназначен для математики с плавающей запятой (на самом деле это десятичная математика с плавающей запятой, в которой он не хорош, если все в базе 2, вы в порядке).

Например, в Chrome,

0.01 >= 1-0.99

оценивается как false.

Этот предыдущий ответ содержит более подробное объяснение, включая официальные ответы о том, что делать.

Но для меня это не обман - преобразовать все ваши числа в целое число центов перед выполнением вычислений. Многие разработки программного обеспечения находят способы преобразовать обычные человеческие вещи в вещи, которые могут быть эффективно выполнены компьютером, и логически работает представление десятичных денег в виде целого числа центов.

...