Кассовый реестр Freecodecamp Project - провальные тесты 18 и 19 [закрыто]Html

Программисты Html
Ответить
Anonymous
 Кассовый реестр Freecodecamp Project - провальные тесты 18 и 19 [закрыто]

Сообщение Anonymous »

Я пытаюсь решить проблему фрикодекампа «Кассовый регистр» и прохожу все тесты, кроме испытаний 18 и 19. Я запутался в том, почему мой код не выполняет эти тесты, и я бы признателен за советом.
[*] Когда цена составляет 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)]);
}
});

**// ✅ Update `cid` before checking "CLOSED"
cid = cid.map(([denomination, total]) => {
let returnedAmount = finalAmount.change.find(([d]) => d === denomination)?.[1] || 0;
return [denomination, precise(total - returnedAmount)];
});

// ✅ Update total cash in drawer
totalCashInDrawer = sum(cid);

//THIS IS WHERE I THINK THE CODE IS GOING WRONG, AS THE ERRORS SEEM TO BE SPECIFICALLY REGARDING THE CLOSED STATUS
// ✅ Correct check for "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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»