如何将 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)
找出 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
。
尝试:
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)
来获取绝对值。
我有两个可以改变的数字,比如 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)
找出 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
。
尝试:
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)
来获取绝对值。