Задача про флирансеров и стоимости их участия в проектах. Нужна помощь с фунцией priceWithMonthlyDiscount

Ребят, нужна Ваша помощь. Изучаю JS около 4 мес. Задача достаточно проста, но смогла завести меня в тупик. Собственно условие:

Часто клиенты фрилансеров нанимают их для проектов, рассчитанных на несколько месяцев. В этих случаях фрилансер решает предложить скидку за каждый полный месяц, а оставшиеся дни оплачиваются по дневной ставке. В каждом месяце 22 расчетных дня. Помогите им оценить стоимость таких проектов с учетом почасовой ставки, количества дней, в течение которых проект охватывается, и ежемесячной ставки дисконтирования. Скидка всегда передается в виде числа, где 42% становится 0.42. Результат необходимо округлить до ближайшего целого числа.

Вот моё решение:

function priceWithMonthlyDiscount(ratePerHour, numDays, discount) {
  return (
    Math.ceil(
      Math.floor(ratePerHour * (1 - discount / 100)) * (numDays % 22) +
      22 * Math.ceil(numDays / 22) * Math.floor(ratePerHour * (1 - discount / 100)))
  )
}

console.log(priceWithMonthlyDiscount(16, 70, 0))

Обязательно такого вида.

где:
ratePerHour - плата за час
numDays - количество дней для проекта
discount - скидка

Вот ошибка:

Ошибка

P.s.: пробовал использовать YaGPT2 - подвижек нет


Ответы (1 шт):

Автор решения: SwaD

Основная ошибка, вы плату за час не переводили в плату за день

function priceWithMonthlyDiscount(ratePerHour, numDays, discount) {
  if (discount && discount > 1 ) discount = discount / 100;
  const rateByDay = ratePerHour * 8;
  const fullMonthDays = Math.floor(numDays / 22) * 22;
  return Math.round((fullMonthDays * (1 - discount) + numDays - fullMonthDays) * rateByDay);
}

console.log(priceWithMonthlyDiscount(16, 70, 0));

Так же, множественные округления лишние, достаточно округлить результат.

→ Ссылка