2013-09-23 25 views
52

の代わりにの次のの倍数に切り上げる整数値(2〜5桁の長さ)を取るユーティリティ関数が必要ですここでは5の倍数は、私が得たものである:私はround5(37)を実行すると、私は35
たい私はround5(32)を実行するとJavascript:5の次の倍数に切り上げます

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

、それは私に30を与えるが、それは私が40をしたい35を与えます。

私はround5(132)を実行すると、それは私に130を与え、私は135
をしたい私はround5(137)を実行すると、それは私が140

などをしたい135を与える...

私はどのように行うのですかこの?

+3

は 'round5(5)' 5、または10を与えるべきか? – user2357112

+1

について:xを5で割り、最も近い整数に切り上げて(Math.ceil関数を使用)、5を掛けます。 –

+2

round5(5)は5を返します。 –

答えて

126

この作品行います:

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

をそれはx機能Math.round(number/x)*xの最も近い倍数に共通丸めnumberだけのバリエーションだが、.ceil代わりの.roundを使用すると、それは常に切り上げの代わりに、アップ/ダウン可能数学的なルールに従って。

+0

あなたはこのソリューションにどんなに早く来たのか少し説明できますか?私はMath.ceilが整数全体に小数点以下を切り上げるだけだと思った。 –

+1

@AmitErandole OK、私は答えを編集します – 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 
関連する問題