2013-05-15 89 views
1

的函數帶有一個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); 
    } 

但結果顯然是錯誤的。例如,96的DPI會給我141%的結果。顯然這是錯誤的,但我缺乏數學理解知道爲什麼 - 以及如何解決它。

我一定誤解了這個函數的功能。

任何人都可以詳細說明這一點嗎?

回答

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); 
    } 

我想你會得到你想要的結果,我檢查了它,它看起來不錯:)

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); 
} 

它會根據您的要求

+0

謝謝!但這正是我自己寫的,唯一的區別在於範圍限制(大於,小於)。我試過了,如果我調用interpretDPI(96),它會返回139; – SquareCat