Ich habe folgenden Code:
var str = "0x4000000000000000"; //4611686018427387904 decimal
var val = parseInt(str);
alert(val);
Ich bekomme diesen Wert: " 4611686018427388000
", was ist0x4000000000000060
Ich habe mich gefragt, ob JavaScript 64-Bit-Ganzzahlen falsch behandelt oder ob ich etwas falsch mache.
javascript
numbers
integer
64-bit
ahmd0
quelle
quelle
Antworten:
JavaScript repräsentiert Zahlen im IEEE-754 -Format mit doppelter Genauigkeit (64 Bit). Soweit ich weiß, erhalten Sie eine Genauigkeit von 53 Bit oder fünfzehn bis sechzehn Dezimalstellen. Ihre Nummer hat mehr Ziffern, als JavaScript verarbeiten kann, sodass Sie eine Annäherung erhalten.
Dies ist als solches kein wirklicher "Missbrauch", aber offensichtlich ist es nicht sehr hilfreich, wenn Sie bei großen Zahlen volle Präzision benötigen. Es gibt einige JS-Bibliotheken, die größere Zahlen verarbeiten können, z. B. BigNumber und Int64 .
quelle
UInt64
; Während Mozilla die Unterstützung für UInt64 hinzugefügt hat, ist dies kein Standard. WebGL hat ähnliche Anforderungen, aber leider gibt es auch keineUint64Array
, nur Uint32Array .Chromium Version 57 und höher unterstützt nativ Ganzzahlen mit beliebiger Genauigkeit. Dies heißt BigInt und wird auch für andere Browser bearbeitet . Es ist dramatisch schneller als JavaScript-Implementierungen.
quelle
javascript.options.bigint
Flag aktiviert ist.console.time("go");for (var i=0;i<10000000;++i) {} console.timeEnd("go");
64-Bit-Zahlenconsole.time("go");for (var i=0n;i<10000000n;++i) {} console.timeEnd("go");