我试图在任意一年的经济衰退中进行复利计算。以下promise函数计算变量投资组合的开发。
澄清的编辑:
recessions
是一个将recyear从1到20循环的数组(recseverity
是静态的)thisyear == recyear
)每次运行会在不同年份触发,导致portfolio
在不同年份减少50%
const chunk = ( horizon, principal, roi, recyear, recseverity ) => {
return new Promise( resolve => {
// Decimalise and create portfolio holder
let portfolio = principal
let crash = 1 - ( recseverity / 100 )
let grow = 1 + ( roi / 100 )
// Loop over the years and crash or grow
for (let thisyear = 1; thisyear < horizon +1; thisyear++) {
thisyear == recyear ? ( portfolio *= crash ) : ( portfolio *= grow )
console.log( portfolio )
}
console.log( 'last', portfolio )
// Resolve with the outcome
resolve( { year: recyear, result: portfolio } )
} )
}
const horizon = 20
const principal = 100
const roi = 7
const recseverity = 50
const yearlyadd = principal/horizon
const recessions = []
for (let year = 1; year < horizon +1; year++) {
recessions.push( { year: year, severity: recseverity } )
}
Promise.all( recessions.map( recession => chunk( horizon, principal, roi, recession.year, recession.severity ) ) )
.then( console.log.bind( console ) )
除了投资组合变量的最终结果是一个对我没有意义的价值之外,一切都很完美。所有他们返回180.82637675169082。
我可以在console.log语句中看到for循环完美地工作直到循环的最后一次运行,它突然决定180.82637675169082就是答案。这是不可能的。
以上输出:
[ { year: 1, result: 180.82637675169082 },
{ year: 2, result: 180.82637675169082 },
{ year: 3, result: 180.82637675169082 },
{ year: 4, result: 180.82637675169082 },
{ year: 5, result: 180.82637675169082 },
{ year: 6, result: 180.82637675169082 },
{ year: 7, result: 180.82637675169082 },
{ year: 8, result: 180.82637675169082 },
{ year: 9, result: 180.82637675169082 },
{ year: 10, result: 180.82637675169082 },
{ year: 11, result: 180.82637675169082 },
{ year: 12, result: 180.82637675169082 },
{ year: 13, result: 180.82637675169082 },
{ year: 14, result: 180.82637675169082 },
{ year: 15, result: 180.82637675169082 },
{ year: 16, result: 180.82637675169082 },
{ year: 17, result: 180.82637675169082 },
{ year: 18, result: 180.82637675169082 },
{ year: 19, result: 180.82637675169082 },
{ year: 20, result: 180.82637675169082 } ]
查看console.log语句,看起来循环的最后一次运行是破坏事情的。组合变量在最后一次运行之前发展良好,然后它变成180.82637675169082。
答案 0 :(得分:1)
我的假设是错误的。
我认为在复利计算中,投资组合减半的年份很重要。
用现实世界的术语来说:我认为如果你投资X金额,那么明年或10年后是否会出现衰退就很重要。
事实证明它没有。
PBKAC。
非常感谢那些帮助我得出这个结论的人。
答案 1 :(得分:0)
如果您分析代码,您会发现每次都进行相同的计算,结果会相同,请查看代码的这一行
thisyear == recyear ? ( portfolio *= crash ) : ( portfolio *= grow )
var thisyear 将等于 recyear ,只有一次投资组合将乘以崩溃,这只会发生一次&lt;&lt;否则投资组合将乘以增长&gt;&gt;
除了 recyear 之外,每个变量中的每个变量都是相同的 所以除了你改变其他变量之外什么都不会改变结果
所以最后我希望你注意到这个问题