0.5に最も近いJavascript丸め数


96


数値を0.5に四捨五入する方法を教えてもらえますか?
画面解像度に従ってWebページの要素をスケーリングする必要があります。そのため、フォントサイズをptsで1、1.5または2以降にのみ割り当てることができます。

四捨五入すると、小数点以下1桁に丸めるか、小数点以下なしに丸めます。どうすればこの仕事を達成できますか?

回答:


187

2で乗算して丸め、次に2で除算する独自の関数を記述します。

function roundHalf(num) {
    return Math.round(num*2)/2;
}

これを使用して、小数点以下9桁で返される金額の削減関数をクリーンアップしました...(num * 100)/ 100は完全に機能しました。
ダスティンクライドラー

最終的に13.0または13.5のいずれかを使用したい場合は、以下の回答と組み合わせて回答します。}
Dan D

num * 2の丸めはすべてのケースで機能しません。15.27のような小数を試してください=>式を使用すると、実際には15.5を返すはずの=> 15が得られます。**** toFixedを使用する方が良いと思います(num * 2).toFixed()/ 2
sfdx bomb

@sfdxbombこれをチェックしましたか?ブラウザのコンソールでroundHalf(15.27)15.5
マラレス

81

ここにあなたに役立つかもしれないより一般的な解決策があります:

function round(value, step) {
    step || (step = 1.0);
    var inv = 1.0 / step;
    return Math.round(value * inv) / inv;
}

round(2.74, 0.1) = 2.7

round(2.74, 0.25) = 2.75

round(2.74, 0.5) = 2.5

round(2.74, 1.0) = 3.0


1
どういうinv意味ですか?inv変数は何を表していますか?
デイラン

1
@Deilanだと思いinverseます。
Alex K

2

Math.round(-0.5)0を返しますが、数学の規則によれば-1でなければなりません。

詳細:Math.round() およびNumber.prototype.toFixed()

function round(number) {
    var value = (number * 2).toFixed() / 2;
    return value;
}

1
@ゆりあなたの言っていることをさらに詳しく説明するためにround、負の数の点で正の整数のスペクトルに向かう、指定された値より大きい次の整数に丸めます。-2.5は-2になります。あれは正しいですか?
ダニーブリス2015年

確認しました。Math.ceil(-1.75) == -1Math.floor(-1.75) == -2。だから、これにより、最大つまずい取得誰のために、同じようにそれを考えるceilリターンよりも大きい数を、floor返し未満の数を。
ダニーBullis

2

0.5を超えて丸めるために、newtronによる上位の回答を拡張する

function roundByNum(num, rounder) {
    var multiplier = 1/(rounder||0.5);
    return Math.round(num*multiplier)/multiplier;
}

console.log(roundByNum(74.67)); //expected output 74.5
console.log(roundByNum(74.67, 0.25)); //expected output 74.75
console.log(roundByNum(74.67, 4)); //expected output 76

1
    function roundToTheHalfDollar(inputValue){
      var percentile = Math.round((Math.round(inputValue*Math.pow(10,2))/Math.pow(10,2)-parseFloat(Math.trunc(inputValue)))*100)
      var outputValue = (0.5 * (percentile >= 25 ? 1 : 0)) + (0.5 * (percentile >= 75 ? 1 : 0))
      return Math.trunc(inputValue) + outputValue
    }

トゥナキのより良い反応を見る前にこれを書いた;)


0
var f = 2.6;
var v = Math.floor(f) + ( Math.round( (f - Math.floor(f)) ) ? 0.5 : 0.0 );

3
f = 1.9の場合、v = 1になりますが、これは正しくありません。
bogatyrjov 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.