2014-02-09 39 views
0

我想解決問題時,我需要限制整數的最小值和最大值。在我的情況下,它的值可以從0到200,如果你添加它應該添加作爲開銷。所以,我想是:Javascript數學運算範圍編號

var value = 100; 
//value - 100 should be 0 
//value - 150 should be 150 
//value + 150 should be 50 

現在我必須解決如何正確地限制頂部(且僅當最小爲0):

(value - 150) % 200 

據我所知,它可能用if語句做但我想知道如果它可能更聰明的使用自定義函數。

+0

您可以加入一個例子,其中分不會是零? [模塊化算術]的法則(https://en.wikipedia.org/wiki/Modular_arithmetic)可能不再適用。 – Bergi

+0

@Bergi在我的情況下,其簡單,因爲min始終爲0,但示例可以是從10到100的極限值。 –

回答

1

我感到如果可能的是更聰明的使用自定義功能疑惑。

的數學不一定是聰明,但使用一個額外的功能會少寫,更具可讀性和可維護性更好。要解決與負值,使用上的問題:

function mod200(n) { 
    return (n % 200 +200) % 200; 
} 

>>> mod200(100 - 100) 
0 
>>> mod200(100 - 150) 
150 
>>> mod200(100 + 150) 
50 
+0

它是我所需要的,它的聰明,因爲這裏只是一行代碼;) –

+0

儘管不一定高效: - /也許'n <0? n%200 + 200:n%200'會更聰明:-) – Bergi

+0

不,它按預期工作((0-420)%200 +200)%200 = 180 –

-1
function bound(value, min, max) { 
    return Math.min(Math.max(val,min),max); 
} 
你的情況

所以,bound(value,0,200);

+2

-1 OP似乎希望模塊化算術,而不是鉗位。舉第二個例子,'bound(100 - 150,0,200)'應該是150,而不是0. – delnan

+0

是的,它會限制到最小值和最大值,但是如果值小於0,那麼它需要做最大值這就是情人然後0 –

+0

所以綁定(-5,0,200)應該返回195 –