繁体   English   中英

将线性范围转换为另一个范围,保持比率,但不知道原来的最小值和最大值

[英]Convert linear range to another range, maintaining ratio, but without knowing the original minimum and maximum

因此,对于 C#,我正在处理一个包含变量的数据集,该变量可以具有我无法预先确定的各种范围的值。 范围是一个值,可以是-x到x,中位数是0,x可以是-15到15这样的范围,也可以是-1到1。我收到的数据更多是基于从 0 到范围 min 到范围 max 的偏差,我相信这对公式至关重要。

我正在尝试将 -x 的范围转换为 x,使其处于 0 到 100 或 -1 到 1 的范围内,同时保持原始比率。 我看过将数字范围转换为另一个范围,保持比率,但那里的公式需要一个已知和预定的范围最小值和最大值。 数学当然不是我的强项,我完全不知道如何转换这些数据,所以这里的任何帮助将不胜感激。

如果它确实有帮助,我收到的数据在列表/数组中,类似于:

x[]:{ 1.47f, 1.21f, 0.49f, -0.05f, -0.69f, -1.8f, -2.35f, -1.2f, -0.42f, 4.56f }

因此,您实际上希望将您的值转换为百分比,其中您的最大值和最小值在您的数据中定义,因此事先不知道。

知道了这一点,您就可以使用此解决方案中提供的数学: 数学范围到百分比

然后下面的代码应该可以工作。

float[] range = { 1.47f, 1.21f, 0.49f, -0.05f, -0.69f, -1.8f, -2.35f, -1.2f, -0.42f, 4.56f };
float min = range.Min();
float max = range.Max();

float[] newValue = new float[range.Length];
for (int i = 0; i < range.Length; i++)
    newValue[i] = (range[i] - min) / (max - min);

for (int i = 0; i < range.Length; i++)            
    Console.WriteLine($"Value: {range[i]}:  New Value {newValue[i]}");

这会产生一个介于 0 和 1 之间的值,如果你想转换为介于 0 和 100 之间的值,那么你只需要将它乘以 100。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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