Javascript:次の5の倍数に切り上げ


113

最も近い 5の倍数ではなく、の5の倍数に切り上げる整数値(長さが2から5桁の範囲)を受け取るユーティリティ関数が必要です。

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)130135が必要な場所が表示されます。
実行するとround5(137)135140が必要な場所が表示されます。

等...

どうすればよいですか?


3
round5(5)5または10を与える必要がありますか?
user2357112は2013

1
方法:xを5で割り、最も近い整数に切り上げ(Math.ceil関数を使用)、次に5を掛けます。
マーティンウィルソン

2
round5(5)は5を与える必要があります
アミットエランドール2013

回答:


270

これは仕事をします:

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

これnumberは、x関数の最も近い倍数への一般的な丸めのバリエーションですMath.round(number/x)*xが、.ceil代わりに.roundを使用すると、数学的なルールに従って、切り下げ/切り上げではなく、常に切り上げられます。


どのようにしてこのソリューションにそれほど早く着手したのかについて少し説明してもらえますか?Math.ceilは小数を整数に丸めるだけだと思いました。
アミットエランドール2013

2
まあ、それはここで整数全体に切り上げます、@ AmitErandole;)
マイケルクレリン-ハッカー

1
コンパクトで効率的な+1 ...そして10に丸めますよね?:)
zx81

元の数は、我々は、関数呼び出しに設定されたものは何でもに丸められ、わずか5を固定されていないことができますので、私は...、「オールラウンダー」を示す、この関数に別のパラメータを追加したい
TheCuBeMan

3
このソリューションが大好きです。必要に応じて複数のインラインを便利に変更できるように、クロージャーを使用して実装しました。const roundToNearestMultipleOf = m => n => Math.round(n/m)*m使用法:roundToNearestMultipleOf(5)(32)
gfullam

10
const roundToNearest5 = x => Math.round(x/5)*5

これにより、数値は最も近い5に丸められます。常に最も近い5に切り上げるには、を使用しますMath.ceil。同様に、常に切り捨てるには、のMath.floor代わりにを使用しますMath.round。その後、他のようにこの関数を呼び出すことができます。例えば、

roundToNearest5(21)

戻ります:

20

受け入れられた答えは実際には間違っています。これが正しい方法です。2.5などの小数でも動作します
Oliver Dixon


5

似たようなものを探している間に私はここに到着しました。私の番号が-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

1
これは、次のようにして簡単に実行できますMath.round
Spencer Stolworthy

2
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 ;

よろしくポール


0

//正確に丸めます

var round = function (value, precision) {
    return Math.round(value * Math.pow(10, precision)) / Math.pow(10, precision);
};

//正確に5に丸めます

var round5 = (value, precision) => {
    return round(value * 2, precision) / 2;
}

0
const fn = _num =>{
    return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

ラウンドを使用する理由は、予期される入力が乱数になる可能性があるためです。

ありがとう!!!


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

多分?


ReferenceError:int定義されていません。たぶんあなたは望んだかもしれませparseIntんがMath.floor、数値を返すのでこれは必要ありません。
パウェル2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.