Часть программы, в которой я работаю, реализует функцию, которая принимает вес пакета в качестве аргумента и рассчитывает стоимость доставки на основе этого веса. Критерии затрат/фунт выглядит следующим образом:C++ Расчет стоимости доставки на основе веса
Package Weight Cost
-------------- ----
25 lbs & under $5.00 (flat rate)
26 - 50 lbs above rate + 0.10/lb over 25
50 + lbs above rate + 0.07/lb over 50
я использовал если-если еще-если сделать расчеты, но чувствует, что его немного повторяющийся:
const int TIER_2_WEIGHT = 25;
const int TIER_3_WEIGHT = 50;
const float TIER_1_RATE = 5.00;
const float TIER_2_RATE = 0.10;
const float TIER_3_RATE = 0.07;
float shipPriceF;
if(shipWeightF <= TIER_2_WEIGHT)
{
shipPriceF = TIER_1_RATE;
}
else if(shipWeightF <= TIER_3_WEIGHT)
{
shipPriceF = ((shipWeightF - TIER_2_WEIGHT) * TIER_2_RATE) +
TIER_1_RATE;
}
else
{
shipPriceF = ((shipWeightF - TIER_3_WEIGHT) * TIER_3_RATE) +
((TIER_3_WEIGHT - TIER_2_WEIGHT) * TIER_2_RATE) +
TIER_1_RATE;
}
return shipPriceF;
Таким образом, вопрос ... это лучший способ выполнить эту задачу, или я должен искать другое решение?
То, что у вас есть, является безукоризненным с точки зрения хорошей практики. Нет ничего повторяющегося в отношении использования if-else if-else. – VHS
Кроме того, здесь нет ничего рекурсивного. –
Предполагая, что это единственные уровни, это выглядит отлично. – Qix