2013-09-23 62 views
52

我需要一個整數值(長度範圍從2到5位數)的實用程序函數,其四捨五入爲下一個的倍數爲5而不是最接近多的5。這裏是我的了:Javascript:四捨五入到下一個倍數

function round5(x) 
{ 
    return (x % 5) >= 2.5 ? parseInt(x/5) * 5 + 5 : parseInt(x/5) * 5; 
} 

當我運行round5(32),它給了我30,在這裏我想35
當我運行round5(37),它給了我35,我想要40。

當我運行round5(132),它給了我130,在這裏我想135
當我運行round5(137),它給了我135,在這裏我想140

等等

我做的怎麼辦這個?

+3

應該'round5(5)'給予5或10? – user2357112

+1

怎麼樣:除以5,四捨五入到最接近的整數(使用Math.ceil函數),然後乘以5? –

+2

round5(5)應該給5 –

回答

126

這將做的工作:

function round5(x) 
{ 
    return Math.ceil(x/5)*5; 
} 

這只是一個普通的四捨五入numberx功能Math.round(number/x)*x的最近倍數的變化,但使用.ceil代替.round使得它始終不是本輪下跌的/向上根據數學規則。

+0

你能解釋一下關於你如何快速到達這個解決方案嗎?我認爲Math.ceil只會將整數小數加起來。 –

+1

@AmitErandole好吧,我會編輯我的答案, – pawel

+0

+1爲了便於閱讀 – supertopi

-2
if(x % 5 == 0) { 
    return int(Math.floor(x/5)) * 5; 
} else { 
    return (int(Math.floor(x/5)) * 5) + 5; 
} 

也許?

+0

ReferenceError:'int'沒有被定義。也許你想'parseInt',但這不是必須的,因爲'Math.floor'返回一個數字。 – pawel

4

是否這樣?

function roundup5(x) { return (x%5)?x-x%5+5:x } 
1
voici 2 solutions possibles : 
y= (x % 10==0) ? x : x-x%5 +5; //......... 15 => 20 ; 37 => 40 ; 41 => 45 ; 20 => 20 ; 

z= (x % 5==0) ? x : x-x%5 +5; //......... 15 => 15 ; 37 => 40 ; 41 => 45 ; 20 => 20 ; 

問候 保羅

2

我來到這裏,同時尋找類似的東西。 如果我的數字是-0,-1,-2,它應該設爲-0,如果它是-3,-4,-5,它應該設爲-5。

我想出了這個解決方案:

function round(x) { return x%5<3 ? (x%5===0 ? x : Math.floor(x/5)*5) : Math.ceil(x/5)*5 } 

而且測試:

for (var x=40; x<51; x++) { 
    console.log(x+"=>", x%5<3 ? (x%5===0 ? x : Math.floor(x/5)*5) : Math.ceil(x/5)*5) 
} 
// 40 => 40 
// 41 => 40 
// 42 => 40 
// 43 => 45 
// 44 => 45 
// 45 => 45 
// 46 => 45 
// 47 => 45 
// 48 => 50 
// 49 => 50 
// 50 => 50