标准化范围 -100 至 100 至 0 至 3

Mat*_*nis 0 c# math

我有一个数字范围-100100.

我正在尝试将其标准化为03小数位。

-100 = 0
-50  = 0.75
 0   = 1.5
 50  = 2.25
 100 = 3
Run Code Online (Sandbox Code Playgroud)

我想创建一个程序函数来将任何范围标准化为任何值,例如:

http://rextester.com/ZJWNS24313

double Normalize(double val, double valmin, double min, double max) 
{
    return (val - valmin) / (max - min);
}
Run Code Online (Sandbox Code Playgroud)

然而,这并没有给出正确的输出。

100变为66.6666666666667代替3.


如果我将公式乘以小数,0.045结果是正确的。

((100 - -100) / (3 - 0)) * 0.045=3

((50 - -100) / (3 - 0)) * 0.045=2.25

((-50 - -100) / (3 - 0)) * 0.045=0.75

但是如何才能使公式不必在末尾指定小数呢?

因为如果我想将一个新数字标准化为0to5我必须将其更改为0.125

nat*_*ain 6

尝试这个:

double Normalize(double val, double valmin, double valmax, double min, double max) 
{
    return (((val - valmin) / (valmax - valmin)) * (max - min)) + min;
}
Run Code Online (Sandbox Code Playgroud)

(假设 valmin 和 valmax 为 -100 到 100,min 和 max 为 0 到 3)

编辑:应该在末尾添加最小值而不是减去