简体   繁体   English

简单的数学问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM