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が必要です)。
等...
どうすればいいですか?
これは仕事をします:
function round5(x)
{
return Math.ceil(x/5)*5;
}
これは、一般的な丸めnumber
をx
関数Math.round(number/x)*x
の最も近い倍数に丸めたものですが、.ceil
の代わりに.round
を使用すると、常に[数学的ルールに応じて上下します。
似たようなものを探しながらここに到着しました。私の番号が—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
このような?
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 ;
よろしくポール
const fn = _num =>{
return Math.round(_num)+ (5 -(Math.round(_num)%5))
}
ラウンドを使用する理由は、予想される入力が乱数になる可能性があるためです。
ありがとう!!!
//精度で丸めます
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;
}