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

时间:2015-03-05 16:42:58

标签: javascript rounding

我有两个可以改变的数字,比如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为您提供所有帮助!

6 个答案:

答案 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)

找出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

答案 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;