【问题标题】:How to calculate percentage between the range of two values a third value is如何计算两个值范围之间的百分比,第三个值是
【发布时间】:2014-09-14 16:44:44
【问题描述】:

例子:

我正在尝试找出计算两个值与第三个值的百分比的计算方法。

示例:范围是 46 到 195。值 46 为 0%,值 195 为范围的 100%。这个范围的百分之几是值 65?

rangeMin=46

rangeMax=195

输入值=65

输入百分比 = ?

【问题讨论】:

  • 好的,但是......到目前为止你尝试了什么?
  • inputPercentage = (inputValue/(rangeMax-rangeMin))*100
  • 如果从 46 到 195 的范围应该是 100%,那么您必须从 195 中减去 46 以“标准化”该范围;然后对于值 65 也是如此……然后,这只是“正常”的百分比计算。

标签: algorithm


【解决方案1】:

好吧,我会使用公式

((input - min) * 100) / (max - min)

你的例子是

((65 - 46) * 100) / (195 - 46) = 12.75

或者再长一点

range = max - min
correctedStartValue = input - min
percentage = (correctedStartValue * 100) / range 

如果您已经有了百分比并且正在寻找给定范围内的“输入值”,那么您可以在comments 中使用Dustin 提供的调整后的公式:

value = (percentage * (max - min) / 100) + min

【讨论】:

  • 我需要在给定百分比的范围内找到值。用这个公式,我把它改成了val = ((percent * (max - min) / 100) + min
  • 我怀疑当一个或两个范围数都为负数时,该公式可以工作。
  • 如果范围的最大值或最小值为负数,这将如何工作?
  • @Daisy,让我们测试一下。如果您要从 -10 到 10,则范围是 10 - (-10),即 10 + 10 和 20。看起来是正确的。然后假设输入是 8。correctedStartValue 将是 8 - (-10) = 18。这首先看起来很奇怪,但让我们继续。结果将是(18*100) / 20 = 90%。 90% 对我来说在 -10 到 10 之间的值 8 看起来不错。
  • @Daisy 你只需要确保当两个值都小于0时,那么max就是绝对值最大的那个值。例如 -50 和 -20,然后 max=-50 和 min=-20。范围将为-30,但这很好。需要负号,因为correctedStartValue 也将是负号。
【解决方案2】:

我把这个函数放在一起来计算它。它还提供了设置中间 100% 点然后返回的能力。

用法

//[] = optional
rangePercentage(input, minimum_range, maximum_normal_range, [maximum_upper_range]);

rangePercentage(250, 0, 500); //returns 50 (as in 50%)

rangePercentage(100, 0, 200, 400); //returns 50
rangePercentage(200, 0, 200, 400); //returns 100 
rangePercentage(300, 0, 200, 400); //returns 50 

函数

function rangePercentage (input, range_min, range_max, range_2ndMax){

    var percentage = ((input - range_min) * 100) / (range_max - range_min);

    if (percentage > 100) {

        if (typeof range_2ndMax !== 'undefined'){
            percentage = ((range_2ndMax - input) * 100) / (range_2ndMax - range_max);
            if (percentage < 0) {
                percentage = 0;
            }
        } else {
            percentage = 100;
        }

    } else if (percentage < 0){
        percentage = 0;
    }

    return percentage;
}

【讨论】:

    【解决方案3】:

    如果您想计算值列表的百分比并截断最大值和最小值之间的值,您可以执行以下操作:

    private getPercentages(arr:number[], min:number=0, max:number=100): number[] {
      let maxValue = Math.max( ...arr );
    
      return arr.map((el)=>{
        let percent = el * 100 / maxValue;
        return percent * ((max - min) / 100) + min;
      });
    };
    

    这里是函数调用:

    this.getPercentages([20,30,80,200],20,50);

    会回来

    [23, 24.5, 32, 50]
    

    百分比是相对的,位于最小值和最大值之间。

    【讨论】:

      【解决方案4】:

      可用于缩放任意数量的变量

      Python 实现:

      # List1 will contain all the variables
      list1 = []
      # append all the variables in list1
      list1.append(var1)
      list1.append(var2)
      list1.append(var3)
      list1.append(var4)
      
      
      # Sorting the list in ascending order
      list1.sort(key = None, reverse = False)
      
      # Normalizing each variable using ( X_Normalized = (X - X_minimum) / (X_Maximum - X_minimum)  )
      normalized_var1 = (var1 - list1[0]) / (list1[-1] - list1[0])
      normalized_var2 = (var2 - list1[0]) / (list1[-1] - list1[0])
      normalized_var3 = (var3 - list1[0]) / (list1[-1] - list1[0])
      normalized_var4 = (var4 - list1[0]) / (list1[-1] - list1[0])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 2017-03-10
        相关资源
        最近更新 更多