iPhone SDK现值功能

时间:2010-11-09 21:08:35

标签: iphone objective-c math sdk

现值是未来付款或一系列未来付款的给定日期的价值,折现以反映货币的时间价值和投资风险等其他因素。现值计算在商业和经济学中被广泛使用,以提供一种在有意义的“喜欢”的基础上比较不同时间的现金流量的方法。

http://en.wikipedia.org/wiki/Present_value

在Objective-C函数中解决这个问题的最佳方法是什么?

double retire62 = [benefit62.text doubleValue] * [yearlyReturn.text doubleValue] *12* [lblAgeExpectancy.text doubleValue];
double retire66 = [benefit66.text doubleValue] * [yearlyReturn.text doubleValue] *12* [lblAgeExpectancy.text doubleValue];
double retire70 = [benefit70.text doubleValue] * [yearlyReturn.text doubleValue] *12* [lblAgeExpectancy.text doubleValue];

我只是不熟悉现值/

1 个答案:

答案 0 :(得分:5)

暂时搁置你的代码片段,现值计算本身是相当简单的,至少在它的简单形式。 (如果你开始考虑在不同的条件下使用不同的费率更实际的兴趣,这会变得更复杂一些,但是如果你想进入那个,你需要做一些正确的阅读。)

任何单一未来现金流量的现值是您现在必须投资的金额(所谓的risk-free rate)以便在未来的时间内获得未来金额时机成熟。也就是说,它是指定利率的未来金额discounted

作为一个微不足道的例子,假设你在一年的时间里给我105美元,年利率为5%。如果我现在有100美元并按照这个价格进行投资,那么在一年的时间里我会得到105美元,与你给我的金额相同。因此,未来105美元的目前价值 105美元,但只有100美元。 (这只是一个稍微更正式的等同观察到手中的鸟在灌木丛中值两个。)

让我们看一个稍微更现实的例子,看看计算是如何运作的。假设我将在5年内收到1000美元 - 现在对我有多大价值?

再次假设相关利率为每年5%,并进一步假设它每年复利 - 也就是说,在一年之后将前5%加到原始金额中,然后累计金额再累计第二年的利息,等等。在每年之后,我有我从开始时开始的金额加上金额的5%利息 - 这是我在年初开始时的1.05倍。因此,五年之后我会在开始的时候1.05 * 1.05 * 1.05 * 1.05 * 1.05次。为了在五年内获得1000美元,我将不得不投资$ 1000 / 1.05 * 1.05 * 1.05 * 1.05 * 1.05,或约784美元 - 这就是1000美元的现值。

更一般地说,您需要将未来金额除以pow(1 + r, n)的利率r和年数n(或等效乘以pow(1 + r, -n)),以及关于利率和支付在不同时期的位置(例如,每月复合年率)的简单概括。有关详细信息,请参阅Wikipedia's compound interest entry

好的,回到问题。在Objective-C中对此计算进行编码与在C中对其进行编码没有什么不同。再次使用上述简单版本:

double presentValue ( double futureValue, double annualRate, unsigned int years )
{
    return futureValue * pow ( 1 + annualRate, -years );
}

你可以用Obj-C方法而不是C函数来实现,但本质上非常相似。在复合期间增加更多的复杂性,这是一个练习。

但请注意,这与您自己的代码没有太大的相似之处,这些代码看起来只是盲目地从文本字段中抓取值并将它们相乘。如果你发现自己直接在视图内容上做数学,你可能应该在某个地方听到警钟。

不希望听起来太高,但在我看来,你需要更清楚地从输入中区分基础数据(我们可以称之为模型,如果我们是花哨的)(换句话说,什么用户实际提供的是什么程序,如果没有他们必须考虑它,他们应该知道该怎么做。此外,这两件事应该与用于表示它们的UI元素分开考虑。

换句话说,您可能需要重新审视每个iPhone开发人员应该纹身的整个Model-View-Controller模式;)