2012-05-23 24 views
2

雖然我理解JavaScript中的Math.round/ceil/floor函數,但我一直無法想出解決此問題的工作函數。我怎樣才能在javascript中對多個數字進行舍入?

我想要做的是圍繞任何整數到3的倍數,或者實際上是我選擇的任何倍數。是

時,給出的「3」的倍數值返回數的要求如下:

0 returns 0 
6 returns 6 
7 returns 6 
8 returns 9 
22 returns 21 
23 returns 24 

etc..etc ......因此,基本上,返回值將永遠是一個多給定的參數,在這種情況下'3'。

謝謝大家。

回答

5

您可以使用一個簡單的函數是這樣的:

function roundMultiple3(num) { 
    return(Math.round(num/3) * 3); 
} 

這除以3,四捨五入到最接近的整數,然後乘以3再次恢復全部價值。

或通用版本,它允許您指定多個:

function roundMultiple(num, multiple) { 
    return(Math.round(num/multiple) * multiple); 
} 
+0

簡單的如何尷尬。數學從來不是我的強項。儘管給出的所有答案看起來都是正確的,但我相信你只需幾秒鐘就可以讓其他人知道。無論如何...感謝所有已經回答的人。 – gordyr

3

這應該只是罰款:

function roundToNearest(number, multiple) { 
    return Math.round(number * multiple)/multiple; 
} 

舍入到的數量比最接近的多少,代之以Math.round()Math.floor()。同樣,Math.ceil()將四捨五入到最接近的倍數。

0
Number.prototype.roundup=function(factor){ 
    var n=Math.ceil(this); 
    while(n%factor)++n; 
    return n; 
} 
2

這爲我工作:

function roundTo(n, x) { 
    return Math.round(x/n) * n; 
} 

roundTo(3, 2); // 3 
rountTo(4, 7); // 8