Dieser Artikel vermittelt Ihnen relevantes Wissen über JavaScript und stellt hauptsächlich den relevanten Inhalt zu Zahlentypen vor. Es gibt zwei Arten von Zahlen in JavaScript: Ich hoffe, dass sie für Sie nützlich sind. helfen.
[Verwandte Empfehlungen: Javascript-Video-Tutorial, Web-Frontend]
In JavaScript gibt es zwei Arten von Zahlen:
Der Number , bei dem es sich um einen Zahlentyp im herkömmlichen Sinne handelt, wird im 64 Bit- IEEE-754 -Format gespeichert und ist eine „Gleitkommazahl mit doppelter Genauigkeit“. Bisher sind es alle Zahlen, mit denen wir in Berührung gekommen sind vom Typ Number ;
Der Typ BigInt repräsentiert ganze Zahlen beliebiger Länge, es sei denn, sie stellen andere Zahlen als 2 53 bis -2 53 dar. Wir werden diese professionellen Datentypen in späteren Kapiteln ausführlich vorstellen;
Die Art und Weise, Zahlen zu schreiben, ist sehr einfach, aber JavaScrpt verfügt über viele praktische und schnelle syntaktische Zucker, die wir verwenden können. Das Erlernen dieser syntaktischen Zucker verbessert nicht nur unsere Fähigkeit, Code zu lesen, sondern verbessert auch den Sinn unseres Codes auf hoher Ebene.
Dezimalzahlen sind am einfachsten und wir werden sie in fast jedem Artikel verwenden. Beispielsweise erstellen wir eine Variable und speichern 100 Milliarden:
seien zehn Milliarden = 10000000000;
Obwohl die Operation sehr einfach ist, gibt es ein Problem: Es ist schwierig zu zählen, wie viele 0 auf 1 folgen. Wenn wir einen Überweisungscode schreiben, kann eine falsche 0 zum Bankrott führen.
Zu diesem Zeitpunkt können wir _ wie folgt als Trennzeichen verwenden:
let tenbillion = 10_000_000_000;
Der obige Code kann die Anzahl der 0 eindeutig zählen, was offensichtlich die optimale Lösung ist!
_ Unterstrich hier ist ein syntaktischer Zucker von JavaScript , der von der Engine während der Ausführung ignoriert wird. Die beiden oben genannten Schreibmethoden haben den gleichen Effekt, aber das Leseerlebnis ist sehr unterschiedlich.
Qingqi-Gehirnschaltkreis
Bei manchen Kinderschuhen muss man sich fragen, ich habe seit meiner Kindheit immer 4 0 Gruppen eingeteilt, warum muss ich 3 0 Gruppen bilden? Daher können wir es problemlos wie folgt schreiben:
let tenbillion = 100_0000_0000;
Oder es könnte so geschrieben werden:
let tenbillion = 1_0000_0000_00;
Was ich hier zum Ausdruck bringen möchte, ist, dass es keinen Einfluss auf die Größe der Zahl selbst hat, egal welche Divisionsmethode Sie verwenden. Überlegen Sie sich die leistungsstärkste Methode!
Obwohl die Verwendung _ viele 0 elegant teilen kann, schreiben wir es im wirklichen Leben im Allgemeinen nicht auf diese Weise. Beispielsweise schreiben wir 10000000000 oft als „10 Milliarden“, sodass viele 0 weggelassen werden können, wodurch die Wahrscheinlichkeit einer Bildung verringert wird Fehler.
JavaScript bietet auch eine Möglichkeit, 0 wegzulassen. Wir können den Buchstaben e gefolgt von einer Zahl verwenden, um die Zahl 0 darzustellen. Beispiel:
let tenbillion = 1e10;//10 billion, 1 gefolgt von 10 0sconsole.log(3.14e9);//3140000000, gefolgt von 7 0s, schauen Sie bitte nach unten, wenn Sie Fragen haben.
Das Verständnis des obigen Codes ist sehr einfach. e10 kann als 1_0000_0000_00 verstanden werden 0 was 1 gefolgt von 10 ist. Wir können also denken:
1e10 === 1 * 1_0000_0000_00;//e10 bedeutet 1 gefolgt von 10 03.14e9 === 3.14 * 1_000_000_000;//e9 bedeutet 1 gefolgt von 9 Nullen
Wir können diese Methode auch verwenden, um sehr kleine Zahlen darzustellen, beispielsweise 1 Nanometer:
let nm = 0,000000001; //Einheit (Meter)
Da es zu viele 0 gibt, können wir auch _ verwenden:
sei nm = 0.000_000_001;
Natürlich können Sie e auch alle 0 weglassen, wie folgt:
let nm = 1e-9;//9 0s links von 1, einschließlich der vor dem Dezimalpunkt
Mit anderen Worten bedeutet e-9 1 -9 , also 1/1000_000_000 , sodass die folgende Gleichung wahr ist:
1e-9 === 1 / 1_000_000_000;3.14e-8 === 3.14 / 1_000_000_00;
Hexadezimal ist ein Format, das häufig in der Programmierung verwendet wird, z. B. für Farbe, Codierung usw. Wir können 0x vor gewöhnlichen Zahlen hinzufügen, um hexadezimale Zahlen darzustellen:
let hex = 0xff;//255, Groß-/Kleinschreibung nicht beachtet, 0xFF ist dasselbe
Binärzahlen beginnen mit 0b :
let bin = 0b1011;//11
Oktalzahlen beginnen mit 0o :
let oct = 0o777;//511
Diese einfache Schreibmethode unterstützt nur diese drei speziellen Typen. Für andere Basiszahlen können Sie spezielle Funktionen verwenden, um sie zu generieren ( parseInt ).
Die toString -Methode kann die Zahl in eine Zeichenfolgenform umwandeln, die base entspricht.
Schenken Sie eine Kastanie:
sei num = 996; console.log(num.toString(8));//In oktale Zeichenfolge konvertieren console.log(num.toString(16));//In hexadezimale Zeichenfolge konvertieren console.log(num.toString( 32));// Konvertieren Sie in eine 32-Hexadezimalzeichenfolge
Die Ergebnisse der Codeausführung lauten wie folgt:

Der base kann zwischen 2 und 36 liegen. Wenn nichts ausgefüllt ist, ist der Standardwert 10 .
Beachten Sie, dass Sie in einigen Fällen zwei anwenden müssen . wenn Sie Zahlen verwenden, um die toString -Methode direkt aufzurufen, zum Beispiel:
console.log(123.toString(8));//Fehler, Syntaxfehler console.log(123..toString(8));//Richtig, 173
Es gibt zwei . nach der Zahl. Dies liegt daran, dass der erste . nach der Zahl als JavaScript betrachtet wird und der zweite Punkt der ist, der die Funktion aufruft .
Wenn es sich um eine Dezimalzahl handelt, besteht dieses Problem nicht. Beispiel:
console.log(3.14.toString(8));
Oder wir können Klammern verwenden, um die Verwendung von zwei Punkten zu vermeiden, zum Beispiel:
console.log((123).toString(8));//'173
Das Runden ist eine der gebräuchlichsten Operationen für Zahlen und umfasst normalerweise:
Abrunden, Math.floor(num)
console.log(Math.floor(3.14));//3 console.log(Math.floor(9.99));//9 console.log(Math.floor(-3.14));//-4 console.log(Math.floor(-9.99));//-10
Befolgen Sie nicht das Rundungsprinzip und nehmen Sie direkt die nächste ganze Zahl, die kleiner oder gleich dem aktuellen Wert ist.
Aufrunden, Math.ceil(num)
console.log(Math.ceil(3.14));//4 console.log(Math.ceil(9.99));//10 console.log(Math.ceil(-3.14));//-3 console.log(Math.ceil(-9.99));//-9
Befolgen Sie nicht das Rundungsprinzip und nehmen Sie direkt die nächste ganze Zahl, die größer oder gleich der aktuellen Zahl ist.
Auf die nächste ganze Zahl runden, Math.round(num)
console.log(Math.round(3.14));//3 console.log(Math.round(9.99));//10 console.log(Math.round(-3.14));//-3 console.log(Math.round(-9.99));//-10
Nach dem Rundungsprinzip wird die ganze Zahl genommen, die der aktuellen Zahl am nächsten kommt.
Dezimalstellen entfernen, Math.trunc(num)
console.log(Math.trunc(3.14));//3 console.log(Math.trunc(9.99));//9 console.log(Math.trunc(-3.14));//-3 console.log(Math.trunc(-9.99));//-9
Entfernen Sie direkt die Zahlen nach dem Komma und runden Sie sie auf ganze Zahlen. Der IE-Browser unterstützt diese Methode nicht
Vergleichen Sie die oben genannten vier Methoden:
| Mathe.Boden | Mathe.decke | Matherunde | Math.trunc | |
|---|---|---|---|---|
| 3.14 | 3 | 4 | 3 | 3 |
| 9,99 | 9 | 10 | 10 | 9 |
| -3.14 | -4 | -3 | -3 | -3 |
| -9,99 | -10 | -9 | -10 | -9 |
Die obige Methode rundet die Dezimalzahl einfach in eine ganze Zahl. In manchen Fällen benötigen wir Dezimalzahlen mit einer bestimmten Genauigkeit. Was sollen wir beispielsweise tun, wenn wir die letzten 4 Ziffern von Pi nehmen?
Es gibt zwei Methoden:
Mathe-Multiplikation und Divisionszählung
let pi = 3.1415926;console.log(Math.round(pi * 10000) / 10000);//3.1416
Der obige Code multipliziert zuerst pi mit 10000 , rundet ihn dann und dividiert ihn dann durch 10000 , um so ein Ergebnis zu erhalten, das den Genauigkeitsanforderungen entspricht. Dies scheint jedoch albern und JavaScript bietet uns einen einfacheren Weg.
toFixed(n)
sei pi = 3.1415926;console.log(pi.toFixed(4));//3.1416
Der obige Code scheint kein Problem mit der Ausgabe zu haben. Tatsächlich gibt toFixed einen String zurück. Wenn wir einen numerischen Typ benötigen, können wir ihn mit dem unären Operator + pi.toFixed(4) konvertieren.
Wenn die Dezimalmantisse außerdem nicht lang genug ist, fügt toFixed am Ende '0' hinzu:
let num = 3.1;console.log(num.toFixed(9));
Die Ergebnisse der Codeausführung lauten wie folgt: 
Dies beweist auch, dass der Rückgabewert von toFixed ein String ist, andernfalls wird 0 weggelassen.
Gleitkommadarstellungen sind in vielen Fällen immer voreingenommen
Im Computer werden Gleitkommazahlen gemäß IEEE-754 Standard dargestellt, wobei Gleitkommazahlen mit einfacher Genauigkeit 32 Bit und Gleitkommazahlen mit doppelter Genauigkeit 64 Bit betragen. Bei einer Gleitkommazahl mit doppelter Genauigkeit wird 1 Bit zur Darstellung des Vorzeichens, 52 Bit zur Speicherung der signifikanten Ziffern und 11 Bit zur Speicherung der Position des Dezimalpunkts verwendet.
Obwohl 64 Bit bereits sehr große Zahlen darstellen können, besteht immer noch die Möglichkeit, die Grenze zu überschreiten, zum Beispiel:
let bigNum = 1e999;console.log(bigNum);//Infinity
Die Zahl, die den Maximalwert überschreitet, wird zur Infinity (unendlich) und verliert somit die Größe der ursprünglichen Zahl, was eine Art Abweichung darstellt.
Es gibt noch eine andere Art von Abweichung, die wir lernen müssen:
console.log(0.1+0.2 === 0.3);//falseconsole.log(0.1 + 0.2);
Die Ergebnisse der Codeausführung lauten wie folgt:

Das ist richtig, das Ergebnis von 0.1 + 0.2 ist nicht 0.3 , sondern eine Reihe von 0 gefolgt von einer 4 .
Diese Art der Abweichung ist sehr fatal, insbesondere in Einkaufszentren und Bankarbeitsszenarien. Selbst eine sehr kleine Abweichung führt in Szenarien mit hohem Umsatz zum Verlust endlosen Reichtums.
Ich habe einmal eine Geschichte über einen Bankangestellten gehört, der Millionen von Dollar gestohlen hat, indem er jedem Mitarbeiter den Lohn von nur 20 Cent abgezogen hat!
Ich denke, wenn mir das passieren würde, wäre ich definitiv nicht in der Lage, es zu finden, deshalb ist es so wichtig, immer genau zu sein.
Ich weiß nicht, ob diese Geschichte wahr ist oder nicht~~
Nehmen wir als Beispiel unser gemeinsames Dezimalsystem. Wir alle wissen, dass es bei Dezimalzahlen zwei seltsame Dinge gibt, eines heißt unendliche sich wiederholende Dezimalzahlen und das andere heißt unendliche sich nicht wiederholende Dezimalzahlen. Beispielsweise ist 1/3 eine unendliche Wiederholung dezimal 0.3333333(3) , und pi Es ist eine unendliche, sich nicht wiederholende Dezimalzahl. Unendlich bedeutet, dass die Größe der Zahl nicht eindeutig numerisch beschrieben werden kann und das, was wir schreiben können, ungenau ist.
Es gibt auch einige Endlosschleifenzahlen im Binärformat. Der Unterschied besteht darin, dass eine Zahl wie 0.1 die sehr einfach aussieht, im Binärformat eine Endlosschleifendezimalzahl ist.
Zum Beispiel:
let x = 0.1;console.log(x.toFixed(20));
Die Ergebnisse der Codeausführung lauten wie folgt:

Finden Sie es nicht unglaublich? Wir haben einfach eine Variable erstellt und ihr den Wert 0.1 zugewiesen und dann 20 Dezimalstellen verwendet, aber wir haben ein unglaubliches Ergebnis erhalten.
Wenn wir den Winkel ändern, ist es möglicherweise einfacher, dieses Phänomen zu verstehen. Im Dezimalsystem ist jede durch 10 oder 10 ganze Potenzen geteilte ganze Zahl eine normale und genaue Zahl, beispielsweise 1/10 oder 996/1000 . Wenn Sie jedoch durch 3 dividieren, erhalten Sie ein Schleifenergebnis, z. B. 1/3 .
Diese Beschreibung gilt auch, wenn sie in eine Binärdatei konvertiert wird.
Im Binärsystem ist jede durch 2 geteilte ganze Zahl oder eine ganzzahlige Potenz von 2 eine normale exakte Zahl. Wenn Sie sie jedoch durch 10 teilen, erhalten Sie eine Endlosschleife von Binärzahlen.
Daraus können wir schließen, dass Binärzahlen 0.1 und 0.2 nicht genau darstellen können, genauso wie Dezimalzahlen 1/3 nicht beschreiben können.
Beachten:
Diese Art der Datenabweichung ist kein Fehler von JavaScript, sondern führt zum gleichen Ergebnis für PHP, Java, C, Perl und Ruby.
Rundung
Bei der Anzeige einer unendlich wiederkehrenden Dezimalzahl können wir die toFixed -Methode direkt verwenden, um die Dezimalzahl zu runden. Diese Methode gibt direkt eine Zeichenfolge zurück, was für die Preisanzeige sehr praktisch ist.
0.3.toFixed(2);//0.30
Verwenden Sie kleine Einheiten
Eine andere Möglichkeit besteht darin, kleinere Einheiten zur Berechnung von Preisen und Entfernungen zu verwenden, beispielsweise die Verwendung von Cent anstelle von Yuan, um den Gesamtpreis zu berechnen. Tatsächlich tun dies viele Handelswebsites. Diese Methode verringert jedoch nur die Häufigkeit des Auftretens von Dezimalstellen, und es gibt keine Möglichkeit, das Auftreten von Dezimalstellen vollständig zu vermeiden.
In JavaScript Zahlen gibt es zwei besondere Werte: Infinity und NaN .
Wie kann man beurteilen, ob eine Zahl eine normale Zahl ist?
Wir können zwei Methoden verwenden:
isFinite(val)
Diese Funktion konvertiert den Parameter val in einen numerischen Typ, bestimmt dann, ob die Zahl endlich ist, und gibt true zurück, wenn die Zahl nicht NaN , Infinity oder -Infinity ist.
console.log(isFinite(NaN));//falseconsole.log(isFinite(Infinity));//falseconsole.log(isFinite(3));//trueconsole.log(isFinite('12'));// WAHR Die Ergebnisse der Codeausführung lauten wie folgt:
Da eine Zeichenfolge, die nicht in eine Zahl umgewandelt werden kann, in NaN umgewandelt wird, können wir die Methode isFinite verwenden, um zu bestimmen, ob die Zeichenfolge eine numerische Zeichenfolge ist:
console.log(isFinite('xxxx'));//falseconsole.log(isFinite('Infinite'));//falseconsole.log(isFinite(' '));//true, leere Zeichenfolge wird in 0 konvertiertDie Ergebnisse der Codeausführung lauten wie folgt:

isNaN(Wert)
Gibt true zurück, wenn val NaN oder ein anderer Wert ist, der nicht in eine Zahl umgewandelt werden kann.
console.log(isNaN(NaN));//trueconsole.log(isNaN('Infinite'));//true Ergebnisse der Codeausführung:
Warum die Funktion isNaN verwenden, anstatt sie direkt zu lesen?
Zum Beispiel:
console.log(NaN === NaN);//false
Die Ergebnisse der Codeausführung lauten wie folgt:
Dies liegt daran, dass NaN keiner Zahl entspricht, auch nicht sich selbst.
Object.is(a,b) kann bestimmen, ob die Parameter a und b gleich sind. Wenn sie gleich sind, gibt es true zurück, andernfalls gibt es false zurück. Die Ergebnisse haben nur drei Situationen:
Kann mit NaN verglichen werden
console.log(Object.is(NaN,NaN));//true
Ergebnisse der Codeausführung:

0 und -0
console.log(Object.is(0,-0));//false
Ergebnisse der Codeausführung:

Im Computer werden Positiv und Negativ durch 0 und 1 dargestellt. Aufgrund unterschiedlicher Vorzeichen sind 0 und -0 tatsächlich unterschiedlich und werden auf unterschiedliche Weise ausgedrückt.
andere
Andere Vergleichssituationen sind genau die gleichen wie a === b .
Im Gegensatz zu + und Number können parseInt und parseFloat Zeichenfolgen in Zahlen umwandeln. Wenn Sie beispielsweise + und Number für eine Zeichenfolge wie "100¥" verwenden, wird zwangsläufig NaN zurückgegeben, aber parseInt und parseFloat können damit problemlos umgehen.
Zum Beispiel:
console.log(+"100¥");console.log(parseInt("100¥"));console.log(parseFloat("12.5¥"));Ergebnisse der Codeausführung:

parseInt und parseFloat lesen Zahlen aus einem String, bis sie nicht mehr gelesen werden können. Beide eignen sich besonders für die Verarbeitung von Zeichenfolgen, die mit Zahlen wie "99px" und "11.4em" beginnen. Für Zeichenfolgen, die mit anderen Zeichen beginnen, wird jedoch NaN zurückgegeben.
console.log(parseInt('ff2000'));//NaN Wir haben jedoch festgestellt, ff2000 tatsächlich eine hexadezimale digitale Zeichenfolge ist. parseInt kann diese Situation ebenfalls bewältigen, muss jedoch einen hexadezimalen Parameter hinzufügen.
Zum Beispiel:
console.log(parseInt('FF2000',16));
//16719872
console.log(parseInt('0xFF2000',16));
//16719872
console.log(parseInt('nnnnnn',36));
//1430456963Ergebnisse der Codeausführung:

Das integrierte Math Objekt enthält viele Konstanten und Methoden, die wir häufig verwenden. Hier sind nur einige Beispiele für häufig verwendete:
Mathe.PI
Pi Π ist eine unendliche nichtzyklische Konstante, wir können stattdessen Math.PI verwenden:
console.log(Math.PI);

Math.random()
Generieren Sie eine Zufallszahl im Intervall [0,1) :
console.log(Math.random());console.log(Math.random());

Wenn wir eine Zufallszahl innerhalb eines bestimmten Bereichs benötigen, können wir diese mit einem bestimmten Wert multiplizieren und dann runden.
Math.pow(a,b)
Berechnen Sie a b , zum Beispiel:
console.log(Math.pow(2,3));//8
Math.max()/Math.min()
Wählen Sie aus einer beliebigen Anzahl von Argumenten einen Maximal-/Minimalwert aus:
console.log(Math.max(1,2,3,4,5));//5console.log(Math.min(1,2,3,4,5));//1
