Wri*_*sCS 0 iphone math sdk objective-c
现值是未来付款或一系列未来付款的给定日期的价值,折现以反映货币的时间价值和投资风险等其他因素.现值计算被广泛用于商业和经济学中,以提供在有意义的"喜欢"的基础上比较不同时间的现金流量的方法.
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];
Run Code Online (Sandbox Code Playgroud)
我只是不熟悉现值/
抛开你的代码片段一段时间,现值计算本身是相当简单的,至少在其更简单的形式.(如果你开始考虑在不同的条件下使用不同的费率更实际的兴趣,这会变得相当复杂,但是如果你想进入那个,你需要做一些正确的阅读.)
任何单一的未来现金流量的现值是你必须投资的金额,现在(在所谓的无风险利率,才能有未来的量在时机成熟时).也就是说,它是以指定利率贴现的未来金额.
作为一个微不足道的例子,假设你在一年的时间里给我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)),并且对利率和付款在不同时期的位置进行简单概括(例如,每月复利年率) .有关更多详细信息,请参阅维基百科的复利条目.
好的,回到问题.在Objective-C中对此计算进行编码与在C中对其进行编码没有什么不同.再次使用上述简单版本:
double presentValue ( double futureValue, double annualRate, unsigned int years )
{
return futureValue * pow ( 1 + annualRate, -years );
}
Run Code Online (Sandbox Code Playgroud)
你可以用Obj-C方法而不是C函数来实现,但本质上非常相似.在复合期间增加更多的复杂性,这是一个练习.
但是请注意,这与您自己的代码没有太大的相似之处,这些代码看起来只是盲目地从文本字段中抓取值并将它们相乘.如果你发现自己直接在视图内容上做数学,你可能应该在某个地方听到警钟.
不希望听起来太高,但在我看来,你需要更清楚地区分基础数据(我们可以称之为模型,如果我们是花哨的)来自输入(换句话说,用户是什么实际提供和预期知道如何做的程序,没有他们不得不考虑它).此外,这两件事应该与用于表示它们的UI元素分开考虑.
换句话说,你可能需要重温整个模型 - 视图 - 控制器模式,每个iPhone开发人员应该在他们心中纹身;)
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |