JavaScript で浮動小数点数を整数に変換するには、いくつかの方法があります。私の質問は、どの方法が最高のパフォーマンスを提供するか、最も互換性があるか、またはベストプラクティスと見なされるかです?
私が知っているいくつかの方法を次に示します。
var a = 2.5;
window.parseInt(a); // 2
Math.floor(a); // 2
a | 0; // 2
他にもいると思います。提案?
JavaScript で浮動小数点数を整数に変換するには、いくつかの方法があります。私の質問は、どの方法が最高のパフォーマンスを提供するか、最も互換性があるか、またはベストプラクティスと見なされるかです?
私が知っているいくつかの方法を次に示します。
var a = 2.5;
window.parseInt(a); // 2
Math.floor(a); // 2
a | 0; // 2
他にもいると思います。提案?
このウェブサイトによると:
parseInt は、浮動小数点数を整数に変換する手段として使用されることがあります。引数が数値型の場合、最初に文字列に変換されてから数値として解析されるため、そのタスクには非常に適していません...
数値を整数に丸めるには、Math.round、Math.ceil、および Math.floor のいずれかを使用することをお勧めします...
どうやらビット単位で2倍になります-数字を床に置くための最速の方法ではありません:
var x = 2.5;
console.log(~~x); // 2
以前はここの記事でしたが、現在は404を取得しています:http://james.padolsey.com/javascript/double-bitwise-not/
Googleはそれをキャッシュしました:http://74.125.155.132/search?q=cache:wpZnhsbJGt0J:james.padolsey.com/javascript/double-bitwise-not/+double+bitwise+not&cd=1&hl=en&ct=clnk&gl=us
しかし、ウェイバックマシンはその日を節約します!http://web.archive.org/web/20100422040551/http://james.padolsey.com/javascript/double-bitwise-not/
Douglas Crockford の「Javascript: The Good Parts」から:
Number.prototype.integer = function () {
return Math[this < 0 ? 'ceil' : 'floor'](this);
}
それを行うと、すべての Number オブジェクトにメソッドが追加されます。
次に、次のように使用できます。
var x = 1.2, y = -1.2;
x.integer(); // 1
y.integer(); // -1
(-10 / 3).integer(); // -3
答えはすでに与えられていますが、明確にするために。
これには Math ライブラリを使用します。ラウンド、天井、または床関数。
parseInt は、文字列を int に変換するためのものですが、ここでは必要ありません
toFixed は、フロートを文字列に変換するためのものであり、ここで必要なものではありません
Math 関数は文字列との間の変換を行わないため、とにかく間違っている他の選択肢よりも高速になります。
Number(a).toFixed(0); を使用できます。
または、 a.toFixed(0); だけでもかまいません。
編集:
これは切り捨てとは少し異なり、0 桁に丸められます。他の誰かが示唆したように、toFixed は生の整数ではなく文字列を返します。表示目的に役立ちます。
var num = 2.7; // typeof num is "Number"
num.toFixed(0) == "3"
var i = parseInt(n, 10);
のような基数値を指定しない場合、 は'010'
8 進数として扱われます (したがって、結果は ではあり8
ません10
)。
ビット演算子の使用。整数に変換する最も明確な方法ではないかもしれませんが、あらゆる種類のデータ型で機能します。
関数が引数 を取り、関数が常に整数value
でなければならない (そして 0 が受け入れられる) ように機能するとします。次に、次のいずれかが整数としてvalue
割り当てられます。value
value = ~~(value)
value = value | 0;
value = value & 0xFF; // one byte; use this if you want to limit the integer to
// a predefined number of bits/bytes
最良の部分は、これが数値である文字列(テキスト入力などから得られるもの)で機能すること~~("123.45") === 123
です。数値以外の値は0
、つまり、
~~(undefined) === 0
~~(NaN) === 0
~~("ABC") === 0
16 進数を文字列 (0x
プレフィックス付き)として使用できます。
~~("0xAF") === 175
何らかの型強制が含まれていると思います。これらをparseInt()
および と比較するためにいくつかのパフォーマンス テストを行いますが、スローされず、数値以外のを取得できるMath.floor()
という特別な利便性が気に入っています。Errors
0
質問は、float から int への変換について具体的に尋ねているようです。私の理解では、これを行う方法は を使用することtoFixed
です。そう...
var myFloat = 2.5;
var myInt = myFloat.toFixed(0);
Math.floor()
よりもパフォーマンスが高いか低いかを誰かが知っていますNumber.toFixed()
か?
このようにすることもできます:
var string = '1';
var integer = a * 1;
parseInt() はおそらく最良のものです。a | 0
あなたが本当に望むことをしません(aが未定義またはnull値の場合、0を割り当てるだけです。つまり、空のオブジェクトまたは配列がテストに合格することを意味します)、およびMath.floorは何らかの型のトリックによって機能します(基本的にparseInt()バックグラウンドで)。