2011-01-16 28 views
16

Ich bin ein Anfänger zu Javascript also verzeih mir, wenn ich dumm klingen, weil ich etwas Javascript von W3Fools gelernt habe (die wirklich schwierige Tutorials sind - sie erklären nichts, was ich wissen will, aber alles, was ich wahrscheinlich kann rate aus meiner Erfahrung mit C++).Integer in JavaScript

Ich kann zu MDN wechseln, aber wenn Sie andere Tutorials empfehlen können, das ist großartig.

Anyways, also hier ist meine Frage:

Ich habe gerade gelesen, ein paar Zeilen von this und offenbar:

Zahlen in JavaScript sind „Double-Precision-64-Bit-Format IEEE 754 Werte ", gemäß der Spezifikation. Dies hat einige interessante Konsequenzen. Es gibt keine eine ganze Zahl in JavaScript, so dass Sie ein wenig vorsichtig mit Ihrer Arithmetik sein müssen, wenn Sie Mathe in C oder Java gewohnt sind.

Ich habe schon gesehen, dass es einige der Datentypen (für Variablen) gibt, die ich von C++ gewohnt bin. Aber ich habe nicht erwartet, dass alle Nummern automatisch float s sind. Gibt es keine Möglichkeit, int egers, nicht float zu verwenden? Wird eine zukünftige Version von JavaScript unterstützt int s?

+4

MDN ist eine großartige Ressource und wird häufig hier auf SO verwiesen. –

Antwort

13

Es gibt wirklich nur ein paar Datentypen in Javascript: Objekte, Zahlen und Strings. Wie Sie lesen, JS-Nummern sind alle 64-Bit-Floats. Es gibt keine Ints.

Firefox 4 unterstützt hat für typisierten Arrays, wo Sie Arrays von echten ints und so haben: https://developer.mozilla.org/en/JavaScript_typed_arrays

Bis dahin gibt es hackish Wege Integer Arrays als Strings zu speichern und jeweils ganze Zahlen Ausreißen mit charCodeAt().

4

Ich glaube nicht, dass es jemals ganze Zahlen unterstützen wird. Dies ist kein Problem, da jede vorzeichenlose 32-Bit-Ganzzahl genau als eine 64-Bit-Gleitkommazahl dargestellt werden kann.

Moderne JavaScript-Engines könnten schlau genug sein, um speziellen Code zu generieren, wenn die Zahlen ganzzahlig sind (mit Sicherheitsüberprüfungen, um sich davon zu überzeugen), aber ich bin mir nicht sicher.

+3

Alle JS-Engines (SpiderMonkey hat von seiner ersten Implementierung - der ersten JS-Engine) Int32-Mathematik verwendet, wenn möglich. – gsnedders

+2

Es ist kein Problem ... bis Sie eine 64-Bit-Int oder größer wollen. – Thanatos

+1

Nun, es kann tatsächlich ein ziemlich großes Problem sein. Wenn Sie 100000 Ganzzahlen an Javascript senden und es zur Zusammenfassung auffordern, können Ihnen die Gleitkomma-Probleme ziemlich merkwürdige Antworten geben. Deshalb habe ich diese Frage gefunden. –

0

Es gibt keine Unterstützung für Ganzzahlen. Es sollte eine einfache Sache sein, eine Variable jedes Mal abzurunden, wenn Sie sie brauchen. Der Leistungsaufwand ist überhaupt nicht schlecht.

0

Wenn Sie wirklich Ganzzahlen verwenden müssen, verwenden Sie einfach die Stockmethode für jede gefundene Nummer.

Abgesehen davon ist die lockere Eingabe von Javascript eine der Stärken. diese

2

Verwendung:

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

Und yo kann es wie folgt verwenden:

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

Gibt es irgendeinen Punkt in diesem anderen, als einen leichten Alias ​​von 'Math.floor' zu erstellen? –

+1

Nicht wirklich ..... – qwertymk

+13

Ich würde 'var int = Math.floor;' verwenden, um den zusätzlichen Funktionsaufruf zu vermeiden. – ChaosPandion