C# 标准化范围-100到100到0到3

C# 标准化范围-100到100到0到3,c#,math,C#,Math,我的数字范围是-100到100 我正在尝试将其标准化为带小数点的0到3 -100 = 0 -50 = 0.75 0 = 1.5 50 = 2.25 100 = 3 我想创建一个程序函数,将任何范围规范化为任何值,例如: 但是,这并不能提供正确的输出 100变为66.6666 7而不是3 如果我将公式乘以一个小数0.045,结果是正确的 ((100--100)/(3-0))*0.045=3 ((50--100)/(3-0))*0.045=2.25 (-50--100)/(3-

我的数字范围是
-100
100

我正在尝试将其标准化为带小数点的
0
3

-100 = 0
-50  = 0.75
 0   = 1.5
 50  = 2.25
 100 = 3

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

但是,这并不能提供正确的输出

100
变为
66.6666 7
而不是
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

但是怎样才能得到这个公式,这样我就不必在末尾指定十进制数了

因为如果我想将一个新的数字标准化为
0
5
,我必须将它改为
0.125

,试试这个:

double Normalize(double val, double valmin, double valmax, double min, double max) 
{
    return (((val - valmin) / (valmax - valmin)) * (max - min)) + min;
}
(假设最小值和最大值为-100到100,最小值和最大值为0到3)

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

试试这个:

double Normalize(double val, double valmin, double valmax, double min, double max) 
{
    return (((val - valmin) / (valmax - valmin)) * (max - min)) + min;
}
(假设最小值和最大值为-100到100,最小值和最大值为0到3)

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


似乎缺少一个参数。您需要规格化的值、该值的当前范围(最小值和最大值)和规格化范围(最小值和最大值)。似乎缺少一个参数。你需要标准化的值,该值的当前范围(最小值和最大值)和标准化范围(最小值和最大值)。这似乎工作得很好,我将测试几个值并返回给你。在最后一个术语之前应该是“+”吗?是的@DarenW,我刚刚看到tooThis似乎工作得很好,我将测试几个值并返回给您。在最后一个术语之前应该是“+”吗?是的@DarenW,我也看到了