我有一个生成值数组的函数,如:
[343,709,88,4,0] =总共1144。
我的函数生成的值总是加起来设置为 nMax (在本例中为1144)。
但是现在我分开函数我可以传递这些值的数组并将它们放入由 nMin 确定为 nMax 的范围内,像refit(array,nMin,nMax)。
假设nMin = 30,nMax = 1144。
对于这个例子,这意味着我需要0变为30,其余数字按比例变小,所以所有数字仍然加起来 nMax (1144)。
我尝试根据我在此处找到的公式创建一个函数(https://math.stackexchange.com/questions/43698/range-scaling-problem),但它不起作用:
var oldMin = 0; //constant
var oldMax = 1144; //constant
function refit(oldArray, newMin, newMax) {
var newArray = Array(oldArray.length);
for(var i=0; i < oldArray.length; ++i) {
var oldValue = oldArray[i];
var newValue = (newMin * (1 - ((oldValue - oldMin) / (oldMax - oldMin)))) + (newMax * ((oldValue - oldMin) / (oldMax - oldMin)));
console.log(oldValue + ' = ' + newValue);
newArray[i] = newValue;
}
return newArray;
}
输出结果如下:
343 = 364.00524475524475
709 = 720.4073426573426
88 = 115.6923076923077
4 = 33.89510489510489
0 = 30
哪个不正确,因为输出加起来 1264 ,这是不正确的。
建议?