Το BigInt είναι ένα νέο χαρακτηριστικό που εισήχθη στη JavaScript για να υποστηρίζει αριθμούς μεγάλου μεγέθους. Οι αριθμοί BigInt μπορούν να χρησιμοποιηθούν για να αναπαραστήσουν ακέραιες τιμές με αυθαίρετο αριθμό ψηφίων, εκτός από τον περιορισμό του μεγέθους της μνήμης του συστήματος.
Για να δημιουργήσετε έναν αριθμό BigInt, προσθέστε τη λέξη-κλειδί n
στο τέλος ενός ακέραιου αριθμού ή χρησιμοποιήστε τη συνάρτηση BigInt()
:
const bigNum1 = 123456789012345678901234567890n; const bigNum2 = BigInt("987654321098765432109876543210"); console.log(bigNum1); // Εμφανίζει: 123456789012345678901234567890n console.log(bigNum2); // Εμφανίζει: 987654321098765432109876543210n
Οι αριθμοί BigInt χρησιμοποιούνται κυρίως για αριθμητικές λειτουργίες που απαιτούν υψηλή ακρίβεια και μεγάλο μέγεθος αριθμητικών τιμών. Είναι σημαντικό να σημειωθεί ότι οι αριθμοί BigInt δεν μπορούν να χρησιμοποιηθούν για απλές αριθμητικές λειτουργίες με αριθμούς κανονικού μεγέθους. Για τέτοιες περιπτώσεις, οι κανονικοί αριθμοί JavaScript είναι επαρκείς.
Οι αριθμοί BigInt υποστηρίζουν τις συνήθεις αριθμητικές λειτουργίες, όπως πρόσθεση, αφαίρεση, πολλαπλασιασμό και διαίρεση. Ωστόσο, πρέπει να λαμβάνετε υπόψη ότι οι αριθμοί BigInt δεν μπορούν να συμμετέχουν σε αριθμητικές λειτουργίες με κανονικούς αριθμούς. Για να πραγματοποιήσετε αριθμητικές λειτουργίες μεταξύ αριθμών BigInt και κανονικών αριθμών, πρέπει να μετατρέψετε τον έναν τύπο στον άλλον.
Στην JavaScript, οι ακέραιοι αριθμοί ακριβείας είναι ακριβείς μέχρι τα 15 ψηφία. Αυτό σημαίνει ότι μπορείτε να αναπαραστήσετε και να χειριστείτε ακέραιες τιμές με ακρίβεια μέχρι τον αριθμό 9,007,199,254,740,991.
Για παράδειγμα, ο ακέραιος αριθμός 123456789012345 θα είναι ακριβής, ενώ ο ακέραιος αριθμός 1234567890123456 θα υπερβεί την ακρίβεια και θα είναι αναπαραστατός με περισσότερα από 15 ψηφία.
Εάν χρειάζεστε μεγαλύτερη ακρίβεια για ακέραιους αριθμούς μεγαλύτερους από 15 ψηφία, μπορείτε να χρησιμοποιήσετε το χαρακτηριστικό BigInt που προστέθηκε στην JavaScript. Οι αριθμοί BigInt είναι ακέραιοι με αυθαίρετο αριθμό ψηφίων και μπορούν να αναπαρασταθούν με μεγάλη ακρίβεια.
[adinserter block=”2″]
Για να δημιουργήσετε ένα BigInt, προσθέστε το n στο τέλος ενός ακεραίου αριθμού ή χρησιμοποιήστε τη συνάρτηση BigInt().
Εδώ είναι ένα παράδειγμα:
const bigNum = 123456789012345678901234567890n; console.log(bigNum); // Εμφανίζει: 123456789012345678901234567890n
Στο παράδειγμα αυτό, ο ακέραιος αριθμός 123456789012345678901234567890 αντιμετωπίζεται ως BigInt καθώς έχει προστεθεί το n στο τέλος του. Αυτό δείχνει ότι ο αριθμός είναι τύπου BigInt.
Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση BigInt() για να δημιουργήσετε ένα BigInt από ένα αλφαριθμητικό:
const bigNum = BigInt("987654321098765432109876543210"); console.log(bigNum); // Εμφανίζει: 987654321098765432109876543210n
Στο παράδειγμα αυτό, το αλφαριθμητικό “987654321098765432109876543210” μετατρέπεται σε BigInt μέσω της συνάρτησης BigInt().
Στην JavaScript, ο τύπος δεδομένων του BigInt είναι “bigint”. Μπορείτε να χρησιμοποιήσετε τον τελεστή typeof
για να ελέγξετε τον τύπο μιας μεταβλητής που περιέχει ένα BigInt.
Εδώ είναι ένα παράδειγμα:
const bigNum = 123456789012345678901234567890n; console.log(typeof bigNum); // Εμφανίζει: "bigint"
Το παράδειγμα δείχνει ότι η μεταβλητή bigNum
που περιέχει ένα BigInt έχει τον τύπο δεδομένων “bigint”. Αυτό σας επιτρέπει να αναγνωρίζετε τη χρήση και την επεξεργασία αριθμών BigInt στο πρόγραμμά σας.
Οι τελεστές που μπορούν να χρησιμοποιηθούν σε έναν αριθμό JavaScript μπορούν επίσης να χρησιμοποιηθούν σε ένα BigInt. Οι αριθμητικοί τελεστές που είναι διαθέσιμοι για το BigInt περιλαμβάνουν την πρόσθεση (+), την αφαίρεση (-), τον πολλαπλασιασμό (*) και τη διαίρεση (/).
Εδώ είναι ένα παράδειγμα χρήσης αριθμητικών τελεστών με BigInt:
const bigNum1 = 123456789012345678901234567890n; const bigNum2 = 987654321098765432109876543210n; const sum = bigNum1 + bigNum2; console.log(sum); // Εμφανίζει: 1111111111111111111111111111100n const difference = bigNum2 - bigNum1; console.log(difference); // Εμφανίζει: 864197532086419753208641975320n const product = bigNum1 * bigNum2; console.log(product); // Εμφανίζει: 12193263113702179506089013136698145990502927512345678900n const quotient = bigNum2 / bigNum1; console.log(quotient); // Εμφανίζει: 8000000000n
Στο παράδειγμα αυτό, πραγματοποιούνται αριθμητικές λειτουργίες μεταξύ δύο αριθμών BigInt bigNum1
και bigNum2
. Οι αριθμητικοί τελεστές προσθέτουν, αφαιρούν, πολλαπλασιάζουν και διαιρούν τους αριθμούς BigInt για να υπολογίσουν το αποτέλεσμα. Οι αριθμητικές τιμές που παράγονται είναι επίσης BigInt.
Πρέπει να σημειωθεί ότι οι αριθμητικοί τελεστές BigInt δεν μπορούν να χρησιμοποιηθούν μεταξύ ενός αριθμού BigInt και ενός αριθμού κανονικού μεγέθους. Αν χρειάζεστε αριθμητικές λειτουργίες μεταξύ αριθμών BigInt και αριθμών κανονικού μεγέθους, θα πρέπει να μετατρέψετε τον έναν τύπο στον άλλον.
Ένα BigInt δεν μπορεί να έχει δεκαδικά ψηφία. Οι αριθμοί BigInt χρησιμοποιούνται για την αναπαράσταση ακέραιων αριθμών με μεγάλα μεγέθη που υπερβαίνουν το μέγιστο ακέραιο που μπορεί να αναπαρασταθεί με τους κανονικούς αριθμούς της JavaScript.
Εάν χρειάζεστε αριθμούς με δεκαδικά ψηφία και μεγάλη ακρίβεια, μπορείτε να χρησιμοποιήσετε το αντικείμενο BigNumber από βιβλιοθήκες όπως η BigNumber.js. Η BigNumber.js είναι μια εξωτερική βιβλιοθήκη που παρέχει υψηλή ακρίβεια για αριθμητικές πράξεις με μεγάλα και δεκαδικά αριθμητικά δεδομένα στην JavaScript. Μπορείτε να εγκαταστήσετε την βιβλιοθήκη μέσω του npm και να τη χρησιμοποιήσετε στον κώδικά σας για να εκτελέσετε αριθμητικές πράξεις με μεγάλη ακρίβεια και υποστήριξη για δεκαδικά ψηφία.
[adinserter block=”3″]
Τα αντικείμενα BigInt μπορούν επίσης να γραφούν σε δεκαεξαδική (hexadecimal), οκταδική (octal) ή δυαδική (binary) σημασία. Για να γράψετε ένα BigInt με ένα από αυτά τα συστήματα, μπορείτε να χρησιμοποιήσετε τα προθέματα που ταιριάζουν με το κάθε σύστημα.
Εδώ είναι ένα παράδειγμα για κάθε σύστημα:
Δεκαεξαδική (Hexadecimal):
const hexNum = 0xA1B2C3D4E5F6n; console.log(hexNum); // Εμφανίζει: 101314151617241012n
Οκταδική (Octal):
const octNum = 0o755n; console.log(octNum); // Εμφανίζει: 493n
Δυαδική (Binary):
const binaryNum = 0b10101010n; console.log(binaryNum); // Εμφανίζει: 170n
Στα παραπάνω παραδείγματα, οι αριθμοί BigInt αναπαρίστανται σε διάφορα συστήματα. Ο αριθμός με το πρόθεμα 0x
είναι δεκαεξαδικός, με το πρόθεμα 0o
είναι οκταδικός και με το πρόθεμα 0b
είναι δυαδικός. Αυτό σας επιτρέπει να γράφετε αριθμούς BigInt σε διάφορα συστήματα, ανάλογα με τις απαιτήσεις του προγράμματος.
Το ES6 πρόσθεσε τις ιδιότητες MAX_SAFE_INTEGER
και MIN_SAFE_INTEGER
στο αντικείμενο Number.
Το MAX_SAFE_INTEGER
είναι η μεγαλύτερη ακέραιη τιμή που μπορεί να αναπαρασταθεί με ασφάλεια στην JavaScript. Η τιμή του είναι 9007199254740991
. Αυτό σημαίνει ότι οποιαδήποτε ακέραια τιμή μεγαλύτερη από αυτή θα υπερβεί το όριο και δεν θα είναι ασφαλής.
Το MIN_SAFE_INTEGER
είναι η μικρότερη ακέραια τιμή που μπορεί να αναπαρασταθεί με ασφάλεια στην JavaScript. Η τιμή του είναι -9007199254740991
. Οποιαδήποτε ακέραια τιμή μικρότερη από αυτή θα υπερβεί το όριο και δεν θα είναι ασφαλής.
Αυτές οι ιδιότητες είναι χρήσιμες όταν χρειάζεστε να ελέγξετε αν μια ακέραια τιμή είναι εντός των ασφαλών ορίων που μπορούν να αναπαρασταθούν με ασφάλεια στην JavaScript. Μπορείτε να χρησιμοποιήσετε τις ιδιότητες Number.MAX_SAFE_INTEGER
και Number.MIN_SAFE_INTEGER
για να αναφερθείτε σε αυτές τις τιμές στον κώδικά σας.
Εδώ είναι ένα παράδειγμα εκτύπωσης των τιμών MAX_SAFE_INTEGER
και MIN_SAFE_INTEGER
:
console.log(Number.MAX_SAFE_INTEGER); // Εκτυπώνει: 9007199254740991 console.log(Number.MIN_SAFE_INTEGER); // Εκτυπώνει: -9007199254740991
Στο παραπάνω παράδειγμα, χρησιμοποιούμε την console.log()
για να εκτυπώσουμε τις τιμές των MAX_SAFE_INTEGER
και MIN_SAFE_INTEGER
. Απλά καλούμε τις ιδιότητες Number.MAX_SAFE_INTEGER
και Number.MIN_SAFE_INTEGER
για να αναφερθούμε στις τιμές αυτές και να τις εκτυπώσουμε στην κονσόλα.
Η μέθοδος Number.isInteger()
επιστρέφει true
εάν το όρισμα που δίνεται είναι ένας ακέραιος αριθμός. Αντίθετα, επιστρέφει false
εάν το όρισμα δεν είναι ακέραιος.
Εδώ είναι ένα παράδειγμα χρήσης της μεθόδου Number.isInteger()
:
console.log(Number.isInteger(5)); // Εκτυπώνει: true console.log(Number.isInteger(3.14)); // Εκτυπώνει: false console.log(Number.isInteger(-10)); // Εκτυπώνει: true console.log(Number.isInteger("10")); // Εκτυπώνει: false
Στο παραπάνω παράδειγμα, χρησιμοποιούμε την Number.isInteger()
για να ελέγξουμε εάν οι τιμές είναι ακέραιοι αριθμοί. Η μέθοδος επιστρέφει true
για τους ακέραιους αριθμούς (5
και -10
) και false
για τις μη ακέραιες τιμές (3.14
και "10"
).
Η μέθοδος Number.isSafeInteger()
χρησιμοποιείται για να ελέγξει αν ένας αριθμός είναι ένας “ασφαλής” ακέραιος. Ένας “ασφαλής” ακέραιος είναι ένας ακέραιος που μπορεί να αναπαρασταθεί ακριβώς ως ένας αριθμός διπλής ακρίβειας.
Εδώ είναι ένα παράδειγμα χρήσης της μεθόδου Number.isSafeInteger()
:
console.log(Number.isSafeInteger(9007199254740991)); // Εκτυπώνει: true console.log(Number.isSafeInteger(9007199254740992)); // Εκτυπώνει: false console.log(Number.isSafeInteger(-9007199254740991)); // Εκτυπώνει: true console.log(Number.isSafeInteger(3.14)); // Εκτυπώνει: false
Στο παραπάνω παράδειγμα, χρησιμοποιούμε την Number.isSafeInteger()
για να ελέγξουμε εάν οι τιμές είναι ασφαλείς ακέραιοι. Η μέθοδος επιστρέφει true
για τους ασφαλείς ακέραιους (9007199254740991
και -9007199254740991
) και false
για τις μη ασφαλείς τιμές (9007199254740992
και 3.14
).