web-dev-qa-db-ja.com

JavaScript:次の5の倍数に切り上げます

nearestの倍数の代わりにnext 5の倍数に切り上げる整数値(長さ2から5桁の範囲)を受け取るユーティリティ関数が必要です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)を実行すると、130が得られます(135が必要です)。
round5(137)を実行すると、135が得られます(140が必要です)。

等...

どうすればいいですか?

87
Amit Erandole

これは仕事をします:

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

これは、一般的な丸めnumberx関数Math.round(number/x)*xの最も近い倍数に丸めたものですが、.ceilの代わりに.roundを使用すると、常に[数学的ルールに応じて上下します。

219
pawel

似たようなものを探しながらここに到着しました。私の番号が—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
5
AymKdn

このような?

function roundup5(x) { return (x%5)?x-x%5+5:x }
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
Paul Neulat
const fn = _num =>{
    return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

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

ありがとう!!!

0
Parit

//精度で丸めます

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
Dennis T