Прежде всего, никогда не используйте double
для кода, связанного с деньгами, всегда используйте decimal
.
Кроме того, вы можете не проверять, имеет ли tip
значениеили не используя GetValueOrDefault()
.И, следуя соглашениям c # (если вы действительно заботитесь о читабельности), всегда используйте скобки вокруг if
операторов.
В итоге вы должны получить что-то вроде:
private decimal CalculateFinalTotal(bool hasPrommoCode, decimal promoCodeValue,
decimal finalTotal, decimal? tip)
{
if (!hasPrommoCode)
{
return finalTotal;
}
if (promoCodeValue > finalTotal)
{
// if .HasValue == true => return .Value; otherwise return 0
return tip.GetValueOrDefault();
}
if (tip.HasValue)
{
var totalWithoutTip = finalTotal - tip.Value;
return (totalWithoutTip > promoCodeValue ? totalWithoutTip - promoCodeValue : 0) + tip.Value;
}
return finalTotal - promoCodeValue;
}