[*] Когда цена составляет 19,5, значение в элементе #Cash - 20, CID - [["Пенни", 0,5], ["Никель", 0 ], ["DIME", 0], ["Quarter", 0], ["One", 0], ["Five", 0], ["Ten", 0], ["TWENTY", 0], ["Сто", 0]], и элемент #покупки BTN нажимается, значение в элементе #изменение-DUE должно быть "Статус: закрыто Пенни: $ 0,5".
Для теста 18 я получаю правильный вывод, кроме моего кода, говорит "Статус: закрытая пенни: 0,50 долл. США". Я не могу понять, как исправить его в одно десятичное место, не испортив другие тесты, где, по -видимому, нуждаются значения, которые должны быть возвращены в два десятичных значения. < /P>
Когда цена меньше, чем стоимость в элементе #Cash, общая сумма денежных средств в ящике CID равна изменению, а элемент #Buick-BTN нажимается, значение в #изменение DUE Элемент должен быть «Статус: закрыт» с изменением в монетах и счетах, отсортированных в самом высоком до самого низкого порядка. < /li>
< /ol>
для теста 19, насколько я могу Смотрите, я получаю правильный вывод, поэтому я понятия не имею, почему я не прохожу тест. Например. Когда общая сумма денег составляет 0,5 в копейках, а 20 в двадцатые годы я получаю результат "Статус: закрыто десять: $ 20,00 Пенни: 0,50 долл. США, что выглядит правильно. Код ниже. < /p>
`< /p>
// Variables and arrays
let price = 19.5;
let cid = [
["PENNY", .5],
["NICKEL", 0],
["DIME", 0],
["QUARTER", 0],
["ONE", 0],
["FIVE", 0],
["TEN", 0],
["TWENTY", 20],
["ONE HUNDRED", 0],
];
const denomValues = {
PENNY: 0.01,
NICKEL: 0.05,
DIME: 0.1,
QUARTER: 0.25,
ONE: 1,
FIVE: 5,
TEN: 10,
TWENTY: 20,
"ONE HUNDRED": 100,
};
// Helper to handle floating-point precision
function precise(num) {
return parseFloat(num.toFixed(2));
}
// DOM elements
let changeOwed = document.getElementById("change-due");
let moneyAmount = document.getElementById("cash");
let buyObjects = document.getElementById("purchase-btn");
//return change function, which is called inside another main function (purchaseItem).
**function returnChange(moneyOwedToCustomer) {**
let originalCID = JSON.parse(JSON.stringify(cid)); // Deep copy of original CID
let reversedCID = [...cid].reverse();
let finalAmount = { status: "OPEN", change: [] };
reversedCID.forEach(function (arr) {
let denomination = arr[0];
let totalAvailableInDenomination = arr[1];
let denominationValue = denomValues[denomination];
let amountToReturn = 0;
while (moneyOwedToCustomer >= denominationValue && totalAvailableInDenomination > 0) {
moneyOwedToCustomer = precise(moneyOwedToCustomer - denominationValue);
totalAvailableInDenomination = precise(totalAvailableInDenomination - denominationValue);
amountToReturn = precise(amountToReturn + denominationValue);
}
if (amountToReturn > 0) {
finalAmount.change.push([denomination, precise(amountToReturn)]);
}
});
**//
cid = cid.map(([denomination, total]) => {
let returnedAmount = finalAmount.change.find(([d]) => d === denomination)?.[1] || 0;
return [denomination, precise(total - returnedAmount)];
});
//
totalCashInDrawer = sum(cid);
//THIS IS WHERE I THINK THE CODE IS GOING WRONG, AS THE ERRORS SEEM TO BE SPECIFICALLY REGARDING THE CLOSED STATUS
//
if (totalCashInDrawer === 0) {
finalAmount.status = "CLOSED";
finalAmount.change = reversedCID.filter(([_, amount]) => amount > 0); // Only keep denominations with cash
}
if (moneyOwedToCustomer > 0) {
changeOwed.innerText = "Status: INSUFFICIENT_FUNDS";
} else {
changeOwed.innerText = `Status: ${finalAmount.status} ${finalAmount.change
.map(([denomination, amount]) => `${denomination}: $${amount.toFixed(2)}`)
.join(", ")}`;
}
}**
// Event listener
buyObjects.addEventListener("click", purchaseItem);``
< /code>
Я пробовал переписать закрытый код состояния несколько раз, включая использование и удаление фильтров, пробуя как реверсидные, так и оригинал, использование переменных, блоки перемещения кодов и т. Д. проблема. Код для теста 18 кажется почти там.
Подробнее здесь: https://stackoverflow.com/questions/794 ... -18-and-19
Мобильная версия