2014-11-17 64 views
1

我有這個公式,變量爲mse將Excel公式轉換爲結構化的英文

IFERROR(IF(m - IF(s*(1/ABS(e))>m;m;s*(1/ABS(e)))>m;m;m-IF(s*(1/ABS(e))>m;m;s*(1/ABS(e))))/100;0) 

我想將它翻譯成結構化的英語,這是我,但我懷疑它的正確:

IF e != 0 

    IF m > m 
    return m 

    ELSE IF s/|e| > m 
    return m 

    ELSE IF s/e > m 
    return m - s/e 

    ELSE 
    return s/e 

ELSE 
    return 0 

?? forgot this one upss.. s/e/100; 
+2

那是'$ '簽名是否正確?它給了我一個錯誤。誰製造了這個怪物? :P – Andrew

+0

對不起,我的錯。美元符號不應該在那裏。 – nottinhill

回答

1

分析功能後,我覺得這個簡化版本有相同的結果:

=IFERROR(IF(MIN(m;s/ABS(e))<0;m;m-MIN(m;s/ABS(e)))/100;0) 

而其邏輯可以這樣解釋:

if e = 0 
    0 
else if m - (min between s/|e| and m) > m 
    m 
else 
    m - (min between s/|e| and m) 

即使如此,我不明白這是什麼。 :P

編輯:我添加的奔爵士的代碼的簡化的Javascript版本:

function whacko (m,s,e) { 
    if (e === 0) 
     return 0; 

    var value = m - Math.min(s/Math.abs(e), m); 

    if (value > m) 
     return m; 

    return value; 
}; 
+0

公式適用於廣告行業。你能看看我的看法嗎? – nottinhill

+1

我已經花了我所有的精力瞭解Excel公式。 :P爲什麼不嘗試我的公式來查看它的行爲是否與你的數據一樣,所以你可以在Javascript中使用這個更簡單的算法? – Andrew

+0

哇!用你的代碼庫更新我的答案。簡化也很棒。我真的嘗試過。你怎麼解決它? – nottinhill

0

感謝Andrew的偉大的答覆,這是JS的工作代碼:

var m = 33 
    , s = 43 
    , e = 12.75; // Excel: 29,6% 

function whacko (m,s,e) { 

    if (e === 0) { 

     return 0; 

    } else if (m - (Math.min(s/Math.abs(e), m)) > m) { 

     return m; 

    } else { 

     return m - (Math.min(s/Math.abs(e), m)); 

    } 
}; 

console.log(whacko(m,s,e)); // 29.627450980392158 
+0

你應該在變量中存儲'm - Math.min(s/Math.abs(e),m)'。 :)還要記住,作爲'return'從函數中退出,在它之後不需要'else'。這樣你可以在之後創建這個變量而不用擔心範圍。 – Andrew

+0

剛剛添加到我的答案。 :) – Andrew