Отложив на некоторое время ваш фрагмент кода, само вычисление приведенной стоимости достаточно просто, по крайней мере, в его более простых формах. (Это может стать немного сложнее, если вы начнете рассматривать более реалистичный интерес с разными ставками на разных условиях и тому подобное, но если вы хотите вникнуть в это, вам нужно будет как следует почитать.)
Текущая стоимость любого единственного будущего денежного потока - это сумма денег, которую вам нужно будет инвестировать сейчас (по так называемой безрисковой ставке ), чтобы иметь будущая сумма, когда придет время. То есть это будущая сумма , дисконтированная по указанной процентной ставке.
В качестве тривиального примера, предположим, что вы собираетесь дать мне 105 долларов в год, а годовая процентная ставка составляет 5%. Если у меня сейчас 100 долларов, и я буду инвестировать их с такой скоростью, через год у меня будет 105 долларов, столько же, сколько вы мне должны дать. Таким образом, настоящее значение этих будущих 105 долларов составляет не 105 долларов, а всего 100 долларов. (Это чуть более формальный эквивалент наблюдения того, что птица в руке стоит двух в кустах.)
Давайте рассмотрим более реалистичный пример, чтобы посмотреть, как работает расчет. Предположим, я должен получить 1000 долларов через 5 лет - сколько это будет стоить для меня сейчас?
Снова предположим, что соответствующая процентная ставка составляет 5% в год, и далее предположим, что она составляется ежегодно - то есть, через год первые 5% добавляются к первоначальной сумме, а затем эта совокупная сумма накапливается проценты за второй год и тд. После каждого года у меня есть сумма, которую я начал с начала, плюс 5% от суммы - это в 1,05 раза больше, чем я начал в начале года. Так что через пять лет у меня было бы в 1.05 * 1.05 * 1.05 * 1.05 * 1.05
раз больше, чем в самом начале. Чтобы получить 1000 долларов через пять лет, мне нужно было бы вложить $ 1020 * или около 784 долларов - и это текущая стоимость этих 1000 долларов.
В более общем случае вам нужно разделить будущую сумму на pow(1 + r, n)
для процентной ставки r
и количества лет n
(или эквивалентно умножить на pow(1 + r, -n)
), и существуют простые обобщения для того, где процент ставка и платежи за разные периоды (например, годовая ставка составляется ежемесячно). См., Например, Вложенная процентная запись Википедии для более подробной информации.
ОК, вернемся к вопросу. Кодирование этого вычисления в Objective-C ничем не отличается от кодирования в C. Опять же, используя простую версию, описанную выше:
double presentValue ( double futureValue, double annualRate, unsigned int years )
{
return futureValue * pow ( 1 + annualRate, -years );
}
Вы можете сделать это как метод Obj-C, а не как функцию C, но суть будет довольно схожей. Добавление большей сложности с точки зрения составления периодов и тому подобное оставлено в качестве упражнения.
Обратите внимание, однако, что это не очень похоже на ваш собственный код, который выглядит просто для слепого захвата значений из текстовых полей и их умножения. Если вы обнаружите, что делаете математику непосредственно над содержимым представлений, вы, вероятно, должны где-то слышать тревожные звонки.
Не желая звучать слишком высокопарно, но мне кажется, что вам нужно намного более четко различать исходные данные (мы могли бы назвать это моделью, если мы были фантазийными) от входных данных (другими словами, что действительно ли пользователь предоставляет и что программа должна знать, как обойтись без того, чтобы им приходилось об этом думать). И более того, обе эти вещи следует рассматривать отдельно от элементов пользовательского интерфейса, используемых для их представления.
Другими словами, вам, вероятно, нужно пересмотреть весь шаблон Model-View-Controller , который должен быть нанесен татуировкой каждому разработчику iPhone;)