1107 Stimmen

Was ist der höchste ganzzahlige Wert in JavaScript, den eine Zahl erreichen kann, ohne an Präzision zu verlieren?

Ist dies in der Sprache festgelegt? Gibt es ein bestimmtes Maximum? Ist es in verschiedenen Browsern unterschiedlich?

9voto

Scato Punkte 91

Alles, was Sie für bitweise Operationen verwenden wollen, muss zwischen 0x80000000 (-2147483648 oder -2^31) und 0x7fffffff (2147483647 oder 2^31 - 1) liegen.

Die Konsole wird Ihnen sagen, dass 0x80000000 gleich +2147483648 ist, aber 0x80000000 & 0x80000000 ist gleich -2147483648.

8voto

trincot Punkte 257127

JavaScript hat in ECMAScript 2020 einen neuen Datentyp erhalten: BigInt . Es führte numerische Literale mit dem Suffix "n" ein und erlaubt eine beliebige Genauigkeit:

var a = 123456789012345678901012345678901n;

Die Genauigkeit geht natürlich trotzdem verloren, wenn eine solche große ganze Zahl (vielleicht unbeabsichtigt) in einen Zahlendatentyp umgewandelt wird.

Und natürlich wird es aufgrund des begrenzten Speichers immer Einschränkungen bei der Genauigkeit geben, und die Zuweisung des erforderlichen Speichers und die Durchführung von Berechnungen mit so großen Zahlen kostet Zeit.

So dauert beispielsweise die Generierung einer Zahl mit hunderttausend Dezimalstellen bis zur Fertigstellung deutlich länger:

console.log(BigInt("1".padEnd(100000,"0")) + 1n)

...aber es funktioniert.

7voto

Martin Naatz Punkte 113

Versuchen Sie es:

maxInt = -1 >>> 1

In Firefox 3.6 ist es 2^31 - 1.

4voto

Raynet Punkte 463

Ich habe einen einfachen Test mit der Formel X-(X+1)=-1 durchgeführt, und der größte Wert von X, den ich in Safari, Opera und Firefox (getestet unter OS X) zum Funktionieren bringen kann, ist 9e15. Hier ist der Code, den ich für den Test verwendet habe:

javascript: alert(9e15-(9e15+1));

3voto

jerome Punkte 173

Ich schreibe es so:

var max_int = 0x20000000000000;
var min_int = -0x20000000000000;
(max_int + 1) === 0x20000000000000;  //true
(max_int - 1) < 0x20000000000000;    //true

Dasselbe gilt für int32

var max_int32 =  0x80000000;
var min_int32 = -0x80000000;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X