Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 迭代结果直到0_Javascript_Jquery_Math_Iteration - Fatal编程技术网

Javascript 迭代结果直到0

Javascript 迭代结果直到0,javascript,jquery,math,iteration,Javascript,Jquery,Math,Iteration,我已经编写了一个javascript函数,它接受许多变量来生成结果。我需要做的是通过调整传递给函数的百分比值来生成一个0.00(+/-0.01)的结果 小提琴: 如果从列表中选择第一项,您将看到表格更新结果,用户可以在Price($)字段中输入值,比如100单击计算,结果面板将显示计算结果 选择时的YTM为4.371,产生价格($)=8.52 我需要实现的是通过迭代YTM值并递减或递增0.001直到达到这个结果来显示0.00(+/-0.01),对于这个例子,6.002的YTM让我们足够接近,因为

我已经编写了一个javascript函数,它接受许多变量来生成结果。我需要做的是通过调整传递给函数的百分比值来生成一个0.00(+/-0.01)的结果

小提琴:

如果从列表中选择第一项,您将看到表格更新结果,用户可以在
Price($)
字段中输入值,比如
100
单击计算,结果面板将显示计算结果

选择时的YTM为
4.371
,产生
价格($)
=
8.52

我需要实现的是通过迭代YTM值并递减或递增0.001直到达到这个结果来显示
0.00(+/-0.01)
,对于这个例子,
6.002
的YTM让我们足够接近,因为我们对输出中的
+/-0.01
变化感到满意

在小提琴的
114
线上有一个if语句,我已经开始了,但我现在被困在了该从这里走到哪里

    if (bondCalculation.calculatedPrice !== 0) {

    }

尝试以下方法,根据需要调整变量/参数:

if(calculatedPrice !== 0){
   var currentPrice = calculatedPrice;
   var adjustedYTM =  ytm + 0.01;
   calculatedPrice = calculatePrice(ytm, other, params);

   if(calculatedPrice > currentPrice)
       adjustedYTM = decrementYTM(ytm);
   else
       adjustedYTM = incrementYTM(ytm);

    ytm = adjustedYTM;
}

function incrementYTM(ytm){
    while(calculatedPrice > 0){
        ytm += 0.01;
        calculatedPrice = calculatePrice(ytm, other, params);
    }
    return ytm;
}

function decrementYTM(ytm){
    while(calculatedPrice > 0){
        ytm -= 0.01;
        calculatedPrice = calculatePrice(ytm, other, params);
    }
    return ytm;
}

二进制搜索将起作用。我们的想法是从低YTM值0和高YTM值12000开始。然后取低值和高值的平均值,查看误差,并相应地调整低端或高端。继续这样做,直到误差足够小

你可以替换

if(bondCalculation.calculatedPrice!==0){
}

函数getPrice(ytm){
返回bondCalc(债券期限、债券息票、债券半函数、ytm、债券面值、XTB价格)。计算价格;
}
var低=0,高=12000,年初至今;
var计数=0;
while(true){
计数+=1;
如果(计数=100){
打破
}
年初至今=(低+高)/2;
如果(算术绝对值(getPrice(ytm))<0.0001){
打破
}如果(getPrice(ytm)>0,则为else{
低=ytm;
}否则{
高=ytm;
}
}
ytm=数学四舍五入(1000*ytm)/1000;
年产量;
债券收益率=年初至今;
bondCalculation=bondCalc(债券期限、债券息票、债券半函数、债券指示收益率、债券面值、XTB价格);

要获得这把小提琴:

谢谢你的回答。你能看看小提琴中的Javascript并调整它以反映我的代码,这样我就清楚了。太好了!非常感谢您为这个问题提供了如此优雅的解决方案。