web-dev-qa-db-ja.com

JavaScriptで数値を丸めるにはどうすればよいですか?

プロジェクトの作業中に、元従業員が作成した、基本的に次の形式のレポートを作成するJSスクリプトに出会いました

Name : Value
Name2 : Value2

等.

問題は、値が浮動小数点数(精度が異なる)、整数、または2.20011E+17の形式になる場合があることです。出力したいのは純粋な整数です。ただし、JavaScriptについてはあまり知りません。これらの時々浮動小数点数を取り、整数にするメソッドを書くにはどうすればいいですか?

65
Ace

入力を数値に変換してから丸める必要があります。

function toInteger(number){ 
  return Math.round(  // round to nearest integer
    Number(number)    // type cast your input
  ); 
};

または、ワンライナーとして:

function toInt(n){ return Math.round(Number(n)); };

異なる値でのテスト:

toInteger(2.5);           // 3
toInteger(1000);          // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000
51
aemkei

特定の桁数に丸める必要がある場合は、次の関数を使用します

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }
103
Raj Rao

ECMAScript仕様 によると、JavaScriptの数値は倍精度64ビット形式IEEE 754でのみ表されます。したがって、JavaScriptには実際には整数型はありません。

これらの数値の四捨五入に関して、これを達成する方法はいくつかあります。 Math オブジェクトは、使用できる3つの丸め方法を提供します。

Math.round() は最も一般的に使用され、最も近い整数に丸められた値を返します。次に、 Math.floor() があり、これは数値以下の最大の整数を返します。最後に、数値以上の最小整数を返す Math.ceil() 関数があります。

toFixed() もあり、固定小数点表記を使用して数値を表す文字列を返します。

追伸:Math.round()メソッドには2番目の引数がありません。 toFixed()not IE specific、その- within ECMAScript仕様も

30
Pablo Cabrera

Math.round()を2番目の引数(丸めのための小数の数)と共に使用できるようにする方法を次に示します。

// 'improve' Math.round() to support a second argument
var _round = Math.round;
Math.round = function(number, decimals /* optional, default 0 */)
{
  if (arguments.length == 1)
    return _round(number);

  var multiplier = Math.pow(10, decimals);
  return _round(number * multiplier) / multiplier;
}

// examples
Math.round('123.4567', 2); // => 123.46
Math.round('123.4567');    // => 123
25
Frosty Z

toFixed(x)またはtoPrecision(x)を使用することもできます。ここで、xは桁数です。

これらの方法は両方とも、すべての主要なブラウザーでサポートされています

20
irfandar

Math.round() を使用して、数値を最も近い整数に丸めることができます。

Math.round(532.24) => 532

また、 parseInt() および parseFloat() を使用して、変数を特定の型(この場合は整数と浮動小数点)にキャストできます。

16
Aron Rotteveel

丸めの非常に良い近似:

function Rounding (number, precision){

var newNumber;
var sNumber = number.toString();

var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;

if (number < 0)
  newNumber = (number -  5 * Math.pow(10,-increase));
else
  newNumber = (number +  5 * Math.pow(10,-increase));

var multiple = Math.pow(10,precision);

return Math.round(newNumber * multiple)/multiple;
}

数値の小数部分の長さが非常に長い場合にのみ、正しくありません。

0
user2768720