2011-01-16 15 views
16

私はW3FoolsからいくつかのJavascriptを学んだので、私はダムに聞こえると私を許してくれます。本当に難しいチュートリアルです - 私が知りたいことは何も説明していませんが、 C++での私の経験から推測する)。JavaScriptの整数

私はMDNに切り替えることがありますが、他のチュートリアルを推薦できれば嬉しいです。とにかく

ので、ここで私の質問です:JavaScriptで

番号 「倍精度64ビット形式ですIEEE 754の値:

私はちょうどthisの数行を読んで、そして明らかに"、仕様によると。 これはいくつかの面白い の結果があります。 JavaScriptには という整数はありません。そのため、 またはJavaで数学に慣れていれば、 の計算に少し注意してください。

私はすでにC++から慣れ親しんだデータ型(変数用)がほとんどないことを知りました。しかし、私はすべての数字が自動的にfloatになるとは思わなかった。 intエイサーを使用する方法はありませんか?float? JavaScriptの今後のバージョンではintがサポートされますか?

+4

MDNは偉大な資源であり、頻繁にSOで、ここで参照されています。 –

答えて

13

Javascriptには、実際にはオブジェクト、数値、文字列のデータ型がいくつかあります。読んでいると、JS番号はすべて64ビットの浮動小数点数です。 intはありません。 https://developer.mozilla.org/en/JavaScript_typed_arrays

それまでは、そこに文字列として整数配列を格納するためのハックの方法があり、うち摘採各整数:

のFirefox 4は、あなたが本当 int型の配列と、そのようなを持つことができる型付き配列、をサポートしていますcharCodeAt()を使用してください。

4

整数をサポートするとは思えません。符号なし32ビット整数はすべて64ビット浮動小数点数として正確に表現できるため、問題はありません。

現代のJavaScriptエンジンは、数値が整数であるときに特別なコードを生成するのに十分スマートであることがあります(それを確認するためのセーフガードチェック付き)が、わかりません。

+3

すべてのJSエンジン(SpiderMonkeyの最初の実装 - 最初のJSエンジンから)は可能な限りint32-演算を使用しています。 – gsnedders

+2

64ビット以上のintを必要とするまで問題はありません。 – Thanatos

+1

実際、それは実際にはかなり大きな問題になる可能性があります。あなたが100000の整数をjavascriptに送り、要約するよう要求した場合、浮動小数点の問題はあなたにかなり奇妙な答えを与えるかもしれません。それが私がこの質問を見つけた理由です。 –

0

整数のサポートはありません。あなたが必要とするたびに変数を四捨五入するのは簡単なことです。パフォーマンスのオーバーヘッドはまったく悪くありません。

0

実際に整数を使用する必要がある場合は、遭遇する各番号にfloorメソッドを使用してください。

それ以外の場合は、JavaScriptの緩いタイピングがその強みの1つです。

2

使用この:

function int(a) { return Math.floor(a); } 

そしてヨーヨーはこのようにそれを使用することができます:

var result = int(2.1 + 8.7 + 9.3); //int(20.1) 
alert(result);      //alerts 20 
+0

'Math.floor'のややエイリアスを作成する以外の点はありますか? –

+1

本当は..... – qwertymk

+13

余分な関数呼び出しを避けるには、 'var int = Math.floor;'を使用します。 – ChaosPandion

関連する問題