当前位置: 首页 > 知识库问答 >
问题:

For循环在循环内部和外部具有不同的值

淳于烈
2023-03-14

我试图在任意年份的经济衰退中计算复利。以下promise函数计算可变投资组合的发展。

编辑的清晰度:

  • constdeconceptions是一个从1到20循环一年的数组recseverity是静态的)
  • 三元(thisyear==recyear)在每次运行的不同年份触发,导致不同年份的投资组合减少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。


共有2个答案

蒋联
2023-03-14

如果你分析你的代码,你会发现你每次都做同样的计算,所以结果是一样的,看看这行代码

            thisyear == recyear ? ( portfolio *= crash ) : ( portfolio *= grow )

今年的var将仅等于今年的一倍,投资组合将乘以崩溃,而这将只发生一次

此外,每个变量在每个promise中都是相同的,除了rec一年,所以除了你改变其他变量之外,没有什么会改变结果

最后,我希望你注意到这个问题

轩辕涵亮
2023-03-14

我的假设是错误的。

我假设在复利计算中,投资组合减半的年份很重要。

在现实世界中:我假设如果你投资X笔钱,那么经济衰退是在明年还是在10年后发生就很重要了。

事实证明不是这样。

PBKAC。

非常感谢你们帮助我得出这个结论。

 类似资料:
  • 我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:

  • 我想在一个并行外部循环中运行一个包含for循环(应该并行运行)的函数。因此看起来如下所示: 给定上面的代码,我希望在函数中为循环创建5个并行线程,并且希望这5个线程中的每个线程创建另一个线程来运行自己的并行for循环。

  • 问题内容: 我想遍历“节日” 的 ArrayList 并使用 get 方法获取其信息,并打印出其所有值。由于某些原因,当我使用此代码时,它将始终选择第“ 0”个值,而不增加循环。 如果我将值硬编码为“ get(1)”,它将获得正确的值,因此我的问题显然是语法。 问题答案: 造成具体问题的原因是,您将灰心丧气的旧式_脚本_和其后继EL混合在一起。它们不共享相同的变量范围。在中不可用 _scriptl

  • 本文向大家介绍Python-for循环的内部机制,包括了Python-for循环的内部机制的使用技巧和注意事项,需要的朋友参考一下 Python中,使用for循环可以迭代容器对象中的元素,这里容器对象包括是列表(list)、元组(tuple)、字典(dict)、集合(set)等。但是,为什么这些对象可以使用for循环进行操作呢? 首先,定义一个简单的类尝试一下: 错误信息提示,'TestRange

  • 这里有两个相同的代码,唯一的区别是我在第一个代码中使用的是在for循环内初始化的字符串,另一方面我使用的是在for循环外初始化的字符串,但得到的答案仍然不同 在for循环内初始化的字符串: 输出为以下形状: 在for循环外部初始化的字符串: 输出为以下形状: 我真的很困惑正在发生的事情,提前谢谢你。

  • 您能像这样在JSX中使用循环吗? 或者更确切地说,像这样编写的最佳方法是什么?