2014-02-06 131 views
0

更新: 我可以看到兩個投票來解決問題,因爲不清楚我需要什麼。這裏是我需要的:我需要一次超過1,100,000的價格來計算相應的價格,例如,在1,100,001和1,200,000之間的價格將是220美元,對於1,200,001到1,300,000之間的點將是240美元等,沒有限制,所以例如4,500,001和4,600,000的價格將爲720美元。javascript數學計算案例

我需要做一個javascript caluclation它是這樣的:

1-500,000點$ 30/100,000點

500,001-999,999點$ 25/100,000點

1,000,000點$ 20/100,000點

我有案件開關,將檢查值,然後得到正確的總和,但我想知道我可以做,例如,如果用戶輸入4,500,000點或一些超過1,100,000的隨機值。 這是我目前:

if (Number(amountOfPoints) > Number(0)) { 
    switch (true) { 
     case (amountOfPoints > 0 && amountOfPoints <= 100000): 
      { 
       price = 30; 
       break; 
      } 
     case (amountOfPoints > 100000 && amountOfPoints <= 200000): 
      { 
       price = 60; 
       break; 
      } 
     case (amountOfPoints > 200000 && amountOfPoints <= 300000): 
      { 
       price = 90; 
       break; 
      } 
     case (amountOfPoints > 300000 && amountOfPoints <= 400000): 
      { 
       price = 120; 
       break; 
      } 
     case (amountOfPoints > 400000 && amountOfPoints < 500000): 
      { 
       price = 150; 
       break; 
      } 
     case (amountOfPoints > 500000 && amountOfPoints < 600000): 
      { 
       price = 150; 
       break; 
      } 
     case (amountOfPoints > 600000 && amountOfPoints < 700000): 
      { 
       price = 160; 
       break; 
      } 
     case (amountOfPoints > 700000 && amountOfPoints < 800000): 
      { 
       price = 185; 
       break; 
      } 
     case (amountOfPoints > 800000 && amountOfPoints < 900000): 
      { 
       price = 210; 
       break; 
      } 
     case (amountOfPoints > 900000 && amountOfPoints < 1000000): 
      { 
       price = 235; 
       break; 
      } 
     case (amountOfPoints <= 1000000): 
      { 
       tweetsPrice = 200; 
       break; 
      } 
     default: 
      price = 0; 
      break; 
    } 
} 

任何幫助,我怎麼能計算,如果點是> 1,100,000?它應該每100,000增加20美元。

+1

爲什麼jQuery的標籤?我看不到。 – j08691

+1

@ j08691它的精神在於 – DiegoSalazar

+0

似乎if語句是按順序排列的,而且您不需要同時執行比較的兩個「邊」。 –

回答

0

通常情況下,它的工作原理是這樣的:

function calcPrice(value) { 
    if (value <= 500000) { 
    return 30 * Math.ceil(value/100000); 
    } else if (value <= 1000000) { 
    return 150 + 25 * Math.ceil((value - 500000)/100000); 
    } else { 
    return 275 + 20 * Math.ceil((value - 1000000)/100000); 
    } 
} 

但你的文章的信會:

function calcPrice(value) { 
    if (value <= 500000) { 
    return 30 * Math.ceil(value/100000); 
    } else if (value <= 1000000) { 
    return 25 * Math.ceil(value/100000); 
    } else { 
    return 20 * Math.ceil(value/100000); 
    } 
} 
-1

我有點累了,但我認爲這可能對任何amountOfPoints工作:

var price = 30, 
    strPoints = amountOfPoints.toString(), 
    points = Number(amountOfPoints); 

if (points >= 100000) { 
    var multiplier = Number(points.toString().substring(0, 5 - strPoints.length)); 
    price += 20 * multiplier; 
} 

基本上只是在做price = 30 + 20 * the_significant_digits_of_amountOfPoints其中amountOfPoints大於100,000。當有6個數字時,子串部分給你1,當有7個數字時給出2,依此類推。

這應該適用於「每10萬應增加20美元」的用例。但是,您的案例陳述將價值分配給不符合該模式的價格。所以你必須在你的點數足夠大以超過這些條件之後使用這些代碼。

0

Here is the jsfiddle.您可以鍵入點並查看獎勵值。

你的積分系統似乎是任意的,所以我改變了總是從1開始,而不是有時0和有時1。如果你不喜歡它,那麼你可以改變功能。

function points(inText) { 
    var inNum = (isNaN(Number(inText))) ? 0 : Math.floor(Number(inText)); 
    inNum = Math.floor(inNum/100000); 
    if (inNum < 5) { 
     inNum = inNum * 30; 
    } else { 
     if (inNum < 10) { 
      inNum = (inNum - 5) * 25 + 150; 
     } else { 
      inNum = (inNum - 10) * 20 + 275; 
     } 
    } 
    return inNum; 
}