如何从给定的数字范围缩小输出

时间:2018-04-08 11:33:51

标签: javascript

我正在尝试解决以下问题之一。

我有两个数字MAX = 200,MIN = 110现在一个随机数可以说是120,它只能在这两个数字之间(MAX和MIN)。现在我想缩小MAX = 10,MIN = 1&随机数到新MAX和&之间的相应值。 MIN在这种情况下是2.可以有人帮助我使用优化的javascript函数吗?

3 个答案:

答案 0 :(得分:1)

您要搜索的是地图功能。

function rand(MIN, MAX) {
  return MIN + Math.random() * (MAX - MIN);
}

function map(val, prevmin, prevmax, newmin, newmax) {
  var prevrange = prevmax - prevmin;
  var newrange = newmax - newmin;
  return newmin + (val - prevmin) / prevrange * newrange;
}

var x = rand(10, 20);
console.log(x);
x = map(x, 10, 20, 100, 200);
console.log(x);

说明:

该函数有5个参数,第一个是你要映射的值,第二个和第三个定义旧值所在的范围,第四个和第五个是它应该在的范围。

var prevrange = prevmax - prevmin;
var newrange = newmax - newmin;

计算先前的范围和新值。

return newmin + (val - prevmin) / prevrange * newrange;

首先减法:它计算旧值​​在绝对先前范围内的位置。 / prevrange将此范围映射到0-1并将* newrange映射回新范围。 newmin +只是将其转换回相对范围。

答案 1 :(得分:0)

你在这里:

function newVal(oldMax, oldMin, newMax, newMin, oldVal) {
  return (newMax - newMin)/(oldMax - oldMin)*(oldVal - oldMin) + newMin;
}
console.log(newVal(200,110,10,1,120));

答案 2 :(得分:0)



function scaleToRange(number,MAXinput,MINinput,MAXoutput,MINoutput) {
    return (number-MINinput)/MAXinput*MAXoutput+MINoutput;
}
alert(scaleToRange(120,200,110,10,1))




这会从一个范围到另一个范围按比例缩放数字。它很简单。