[英]Simple math problem
I have a dataset containing n values between 0 and m. 我有一个数据集,其中包含0到m之间的n个值。
Now i want to map this values in the range between min and max. 现在我想将此值映射到最小和最大之间的范围内。 But how do I do that?
但是我该怎么做呢? If i have in every object this method:
如果我在每个对象中都有此方法:
public double getValue(int min, int max) {
// return value between min and max;
}
This want work I think? 我想这想要工作吗?
尝试:
return min + (max - min) * (val / m);
If you're talking about mapping the range 0..m
to min..max
, surely that's just a matter of: 如果您正在谈论将范围
0..m
映射到min..max
,那么这肯定是一个问题:
newval = val * (max - min) / m + min
allowing of course for any integer/floating-point gotchas like inadvertent rounding. 当然允许任何整数/浮点陷阱,例如无意的舍入。
The multiplication by (max - min) / m
will scale it to the correct range and the addition of min
will give it the correct lower offset. (max - min) / m
的乘积会将其缩放到正确的范围,而min
的加法将为其提供正确的较低偏移量。
This code is a bit more generic (doesn't take only 0-m range, but any original range): 这段代码更加通用(不只包含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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.