以百分比计算值范围

时间:2013-05-15 09:28:33

标签: php algorithm math formula percentage

以下函数采用DPI值并返回百分比:

    100%        if the value is bigger than 200
    50% to 100% if the value is between 100 and 200
    25% to 50%  if the value is between 80 and 100
    0%  to 25%  if the value is lower than 80

    static public function interpretDPI($x) {
        if ($x >= 200) return 100;
        if ($x >= 100 && $x < 200) return 50 + 50 * (($x - 100) / 100);
        if ($x >= 80 && $x < 100) return 25 + 25 * (($x - 80) / 20);
        if ($x < 80) return 25 * ($x / 80);
    }

现在我必须根据这些规则更改此功能,返回:

    100%        if the value is bigger than 100
    75% to 100% if the value is between 72 and 100
    50% to 75%  if the value is between 50 and 72
    0%  to 50%  if the value is lower than 50

为了达到这个目的,我试图根据我理解它的行为来重新建模这个功能:

    static public function interpretDPI($x) {
        if ($x >= 100) return 100;
        if ($x >= 72 && $x < 100) return 75 + 75 * (($x - 72) / 28);
        if ($x >= 50 && $x < 72) return 50 + 50 * (($x - 50) / 22);
        if ($x < 50) return 25 * ($x / 50);
    }

但结果是完全错误的。例如,DPI为96会给我141%的结果。显然这是错误的,但我缺乏数学理解知道为什么 - 以及如何解决它。

我一定误解了这个功能是如何运作的。

任何人都可以详细说明这个吗?

2 个答案:

答案 0 :(得分:1)

像这样编辑功能代码

 static public function interpretDPI($x) {
    if ($x > 100) return 100;
    if ($x > 72 && $x <= 100) return 75 + 75 * (($x - 72) / 28);
    if ($x >= 50 && $x <= 72) return 50 + 50 * (($x - 50) / 22);
    if ($x < 50) return 25 * ($x / 50);
 }

它将根据您的要求工作

答案 1 :(得分:0)

这是正确的想法,但公式中的系数数字是错误的,这会得到141%的结果。

你应该试试这个:

  static public function interpretDPI($x) {
   if ($x > 100) return 100;
   if ($x > 72 && $x <= 100) return 75 + 25 * (($x - 72) / 28);
   if ($x >= 50 && $x <= 72) return 50 + 25 * (($x - 50) / 22);
   if ($x < 50) return 50 * ($x / 50);
  }

我认为你会得到你想要的结果,我检查过,看起来不错:)