[*] Когда цена составляет 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>
Я пробовал переписать закрытый код состояния несколько раз через: < /p>
-Использование как реверсий, так и оригинал ( Я думаю, что мне нужно использовать ReversedCid, но я не уверен).
Блоки с движущимися кодами - внесение в изменения, где я помещаю cid.map. < /Li>
Использование фильтра для включения только значений монет, где есть изменение для возврата (поэтому не возвращают значения, где сумма этой монеты в CID
0). < /Li>
< /ul> < /li>
< /ul>
Я вообще не могу видеть, почему мой код не встречается 19, поскольку мой вывод соответствует тому, что именно хочет 19. Мне нужен несколько советов о том, почему он не может пройти этот тест. Другие тесты (все для «открытого» статуса) просят два десятичных значения - я бы предположил, что одно десятичное место было типом -O, как если бы денежные значения в коде обычно не показывают два десятичных местах там Было бы неконтролируемыми на протяжении всего этого (как вы не могли бы написать 0,27 долл. США), но если бы это был тип, мой выход был правильным, как я получаю статус: закрытая пенни: 0,50 долл. США.
Подробнее здесь: https://stackoverflow.com/questions/794 ... -18-and-19
Мобильная версия