我有两个可以改变的数字,比如x1和x2。然后我还有一个随机的数字,但总是在x1和x2之间,比如z。我想要做的是将z更改为最接近的x。
Sooo如果我给你们一个例子:
输入:
x1 = 12.24
x2 = 346.92
z = 274.45
输出:
z = 346.92
z现在是346.92,因为这是z的最接近的数字。这就是我在Javascript中尝试做的事情。我以为没有命令,你必须用一些数学来做。我真的不知道该怎么做......但是有你!
Thnx为您提供所有帮助!
答案 0 :(得分:0)
这个怎么样?
z = (Math.abs(z-x1)<Math.abs(z-x2))?x1:x2;
如果您确定x1&lt; x2,然后:
z = ( (z-x1) < (x2-z) ) ? x1 : x2;
答案 1 :(得分:0)
这是一个有效的jsFiddle 使用Math.abs(z - x1)和Math.abs(z - x2),您可以得到两个值之间的数字。然后检查第一个差异是否大于第二个差异。
x1 = 12.24;
x2 = 346.92;
z = Math.floor((Math.random() * 346) + 1);
z_ = z;
if (Math.abs (z - x1) < Math.abs (z - x2)){
z = x1;
}
else{
z = x2
}
alert(z_ + " is closer to : "+ z);
编辑:每次运行时都添加了random number,这样您就可以确切了解其工作原理
答案 2 :(得分:0)
z = Math.round((z - x1) / (x2 - x1)) * (x2 - x1) + x1;
x1
是否大于x2
,反之亦然,这将始终将z
移动到两者中的较近者。
它是如何运作的?
(z - x1) / (x2 - x1)
找出z
和x1
之间的差异,作为两个极值之间差异的比率。
Math.round((z - x1) / (x2 - x1))
根据接近度选择极端值(1或0)。
Math.round((z - x1) / (x2 - x1)) * (x2 - x1)
多个极端(1或0)由两个极值之间的差异组成。
Math.round((z - x1) / (x2 - x1)) * (x2 - x1) + x1;
将差异添加到x1
,以确保结果等同于x1
或x2
。
答案 3 :(得分:0)
尝试:
z = (Math.abs(x1-z)>(Math.abs(x2-z)) ? x2 : x1);
答案 4 :(得分:0)
只需通过从x1和x2中减去Z来计算差值:
if( (z - x1) < (x2 - z)){
z = x1;
}else{
z= h2;
}
如果值可能为负值,请使用Math.abs(z-x1)
,Math.abs(x2-z)
获取ABSOLUTE值。
答案 5 :(得分:-1)
如果z是随机且均匀分布的:
z = Math.random() > 0.5 : x1 ? x2;