如何将 var 更改为最接近的数字?

How can I change a var to the nearest number?

我有两个可以改变的数字,比如 x1 和 x2。然后我还有另一个数字,它是随机的,但总是在 x1 和 x2 之间,比如 z。我想要做的是将 z 更改为最近的 x。

太好了,如果我给你们举个例子:

输入:

x1 = 12.24
x2 = 346.92
z = 274.45

输出:

z = 346.92

z 现在是 346.92,因为这是最接近 z 的数字。这就是我在 Javascript 中尝试做的事情。我以为没有命令,你必须用一些数学来完成。我真的不知道该怎么做...但是有你!

感谢您的帮助!

这个怎么样?

z = (Math.abs(z-x1)<Math.abs(z-x2))?x1:x2;

如果您确定 x1 < x2,则:

z = ( (z-x1) < (x2-z) ) ? x1 : x2;

如果 z 是随机且均匀分布的:

z = Math.random() > 0.5 : x1 ? x2;

这是一个有效的 jsFiddle 使用 Math.abs(z - x1) and 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 以便您可以确切地看到它是如何工作的

z = Math.round((z - x1) / (x2 - x1)) * (x2 - x1) + x1;

无论 x1 大于 x2 还是相反,这都会使 z 更接近两者。

它是如何工作的?

(z - x1) / (x2 - x1)

找出 zx1 之间的差异作为两个极值之间差异的比率。

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,保证结果等于 x1x2

尝试:

z = (Math.abs(x1-z)>(Math.abs(x2-z)) ? x2 : x1);

只需计算x1和x2减去Z的差:

if( (z - x1) < (x2 - z)){
  z = x1;
}else{
  z= h2;
}

如果值可能变为负数.. 使用 Math.abs(z-x1) , Math.abs(x2-z) 来获取绝对值。