Wie konvertiere ich BigInt in Number in JavaScript?

Lesezeit: 3 Minuten

Benutzer-Avatar
Lucio Paiva

Ich befand mich in der Situation, wo ich einen konvertieren wollte BigInt Wert zu a Number Wert. Zu wissen, dass mein Wert a ist sichere Ganzzahlwie kann ich es umwandeln?

  • Beziehen Sie sich auf den Vorschlag für Stufe 3? Das wäre dort dokumentiert.

    – Sebastian Simon

    29. Dezember 2018 um 15:03 Uhr

  • Schön @Xufox, danke für die Bearbeitung.

    – Lucio Paiva

    29. Dezember 2018 um 15:14 Uhr

Benutzer-Avatar
Lucio Paiva

Es stellt sich heraus, dass es so einfach ist, es an die weiterzugeben Number Konstrukteur:

const myBigInt = BigInt(10);  // `10n` also works
const myNumber = Number(myBigInt);

Natürlich sollten Sie bedenken, dass Ihr BigInt-Wert innerhalb liegen muss [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER] damit die Konvertierung ordnungsgemäß funktioniert, wie in der Frage angegeben.

Sie können verwenden parseInt oder Number

const large =  BigInt(309);
const b = parseInt(large);
console.log(b);
const n = Number(large);
console.log(n);

  • Aus Leistungsgründen schlage ich vor, nicht zu verwenden parseInt dafür. Ja, ja, laut Spezifikation beides parseInt und Number sollte die Konvertierung durchführen, indem Sie BigInt in eine Zeichenfolge vor einer Zahl konvertieren. Dennoch ist die Semantik von parseInt im Vergleich zur Semantik von Number vor allem im Hinblick auf das Wie BigInt(number) ergibt ein BigInt macht es wahrscheinlicher, dass Browser-Anbieter mehr Optimierungen anwenden werden Number(bigValue) als parseInt(bigValue) so dass die Stringifizierung intern übersprungen wird. Daher empfehle ich die Verwendung Number Anstatt von parseInt für Leistung.

    – Jack G

    14. Februar 2020 um 16:59 Uhr


  • @JackGiffin, bitte sehen Sie sich dieses stackoverflow.com/questions/4090518/… wo an parseInt kann in manchen Fällen besser sein

    – I_Al-thamary

    14. Februar 2020 um 17:12 Uhr


  • Ich fürchte, ich verstehe es nicht. I stimme zu parseInt und Number haben unterschiedliche Verhaltensweisen, aber um einen BigInt in eine Zahl umzuwandeln, kann ich mir keine Fälle vorstellen, in denen sie sich unterscheiden würden. Vielleicht kannst du ein Beispiel geben, wo Number und parseInt unterscheiden sich in der Umwandlung von BigInts in Zahlen, um mich aufzuklären. Vielen Dank.

    – Jack G

    15. Februar 2020 um 19:44 Uhr


  • @JackGiffin Du hast in diesem Fall vollkommen recht BigInts und was ich zeigen muss, ist das parseInt und Number haben unterschiedliche Verhaltensweisen und Sie können das Beispiel im obigen Link sehen.

    – I_Al-thamary

    15. Februar 2020 um 20:15 Uhr

  • @I_Al-thamary: Best Practice ist die Verwendung von Radix während der Verwendung parseInt

    – Naveen

    7. Januar um 13:30 Uhr

Benutzer-Avatar
zr0gravity7

Bearbeiten: Siehe die Diskussion in den Kommentaren unten, warum diese Antwort so ist nicht Korrekt. Ich lasse die Antwort trotzdem für die Begriffsklärung offen.

Sie sollten eine der statischen Methoden verwenden:

BigInt.asIntN() – Klemmt einen BigInt-Wert auf einen vorzeichenbehafteten ganzzahligen Wert und gibt diesen Wert zurück.
BigInt.asUintN() – Klemmt einen BigInt-Wert auf einen vorzeichenlosen ganzzahligen Wert und gibt diesen Wert zurück.

wie hier dokumentiert: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#static_methods

  • @zr0gravity7 @naveen, ich hatte die Gelegenheit, dies zu testen, und diese Methoden geben keine Zahlen zurück, sondern stattdessen BigInt-Werte. Ihre Namen sind irreführend, da die N schlägt vor Number, obwohl sie tatsächlich immer noch BigInt-Werte zurückgeben. Versuchen Sie es mit Laufen typeof BigInt.asIntN(64, 1n) um zu sehen, dass es berichtet bigint. Diese Antwort beantwortet also eigentlich nicht die Frage.

    – Lucio Paiva

    7. Januar um 14:57 Uhr


  • Stimmt das. Ein verwirrender Name. Habe die Dokumentation gelesen. <3

    – Naveen

    7. Januar um 15:42 Uhr

  • Die Erklärung des Namens ist, dass „intN“ die Verallgemeinerung von „int32“, „int64“, „int555“ und so weiter ist; oder anders ausgedrückt: “intN” ist die Abkürzung für “N-Bit Integer”. Der Wert dieses N ist der erste Parameter der Funktion. Eine alternative Spezifikation hätte bereitgestellt werden können BigInt.asInt64(x) und BigInt.asInt32(x)aber für maximale Flexibilität wurde die Entscheidung getroffen, einen Single zu haben BigInt.asIntN(N, x) stattdessen.

    – jmrk

    12. Januar um 11:35 Uhr

  • as(Ui|I)ntN macht weder das, was Sie behaupten, noch beantwortet dies die Frage von OP. Diese Funktionen nehmen einen BigInt und geben einen BigInt modulo 2^N zurück.

    – Chris_F

    3. August um 7:32

1082610cookie-checkWie konvertiere ich BigInt in Number in JavaScript?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy