我的数据集包含0到m之间的n个值。
现在我想在min和max之间的范围内映射这些值。但是我该怎么做?如果我在每个对象中都有这种方法:
public double getValue(int min, int max) {
// return value between min and max;
}
我想要这项工作吗?
答案 0 :(得分:5)
尝试:
return min + (max - min) * (val / m);
答案 1 :(得分:3)
如果您正在讨论将范围0..m
映射到min..max
,那肯定只是一个问题:
newval = val * (max - min) / m + min
当然允许任何整数/浮点陷阱,如无意的舍入。
乘以(max - min) / m
会将其缩放到正确的范围,添加min
会为其提供正确的较低偏移量。
答案 2 :(得分:2)
此代码更通用(不仅仅是0米范围,而是任何原始范围):
public double GetValue(int value,
int min,
int max,
int originalMin,
int originalMax)
{
return min + (double)(value - originalMin) * (max - min) / (originalMax - originalMin);
}
// in your case originalMin = 0, and originalMax = m