Αριθμοί JavaScript


Πίνακας περιεχομένων

    Εμφάνιση πίνακα περιεχομένων


Η JavaScript έχει μόνο έναν τύπο αριθμού. Οι αριθμοί μπορούν να γραφτούν με ή χωρίς δεκαδικούς.


Παράδειγμα

let x = 3.14;    // A number with decimals
let y = 3;       // A number without decimals

Δοκίμασέ το Ο ίδιος "

Οι πολύ μεγάλοι ή πολύ μικροί αριθμοί μπορούν να γραφτούν με επιστημονική (εκθέτη) σημειογραφία:

Παράδειγμα

let x = 123e5;    // 12300000
let y = 123e-5;   // 0.00123

Δοκίμασέ το Ο ίδιος "


Οι αριθμοί JavaScript είναι πάντα κινητής υποδιαστολής 64-bit

Σε αντίθεση με πολλές άλλες γλώσσες προγραμματισμού, Η JavaScript δεν ορίζει διαφορετικούς τύπους αριθμών, όπως ακέραιους, σύντομους, μεγάλους, κινητής υποδιαστολής κλπ.

Οι αριθμοί JavaScript αποθηκεύονται πάντα ως κινητή υποδιαστολή διπλής ακρίβειας αριθμούς, ακολουθώντας το διεθνές πρότυπο IEEE 754.

Αυτή η μορφή αποθηκεύει αριθμούς σε 64 bit, όπου ο αριθμός (το κλάσμα) αποθηκεύεται σε bit 0 έως 51, ο εκθέτης στα bit 52 έως 62 και το πρόσημο στο bit 63:

Value (aka Fraction/Mantissa) Exponent Sign
52 bits (0 - 51)  11 bits (52 - 62) 1 bit (63)

Ακέραιος Ακρίβεια

Οι ακέραιοι αριθμοί (αριθμοί χωρίς τελεία ή συμβολισμό εκθέτη) είναι ακριβείς έως και 15 ψηφία.

Παράδειγμα

let x = 999999999999999;   // x will be 999999999999999
let y = 9999999999999999;  // y will be 10000000000000000

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer Precision</h2>

<p>Integers (numbers without a period or exponent notation) are accurate up to 15 digits:</p>

<p id="demo"></p>

<script>
let x = 999999999999999;
let y = 9999999999999999;
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


Ο μέγιστος αριθμός δεκαδικών είναι 17.

Πλωτή Ακρίβεια

Η αριθμητική κινητής υποδιαστολής δεν είναι πάντα 100% ακριβής:

let x = 0.2 + 0.1;

Δοκίμασέ το Ο ίδιος "

Για την επίλυση του παραπάνω προβλήματος, βοηθά ο πολλαπλασιασμός και η διαίρεση:

let x = (0.2 * 10 + 0.1 * 10) / 10;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>Floating point arithmetic is not always 100% accurate:</p>
<p id="demo1"></p>

<p>But it helps to multiply and divide:</p>

<p id="demo2"></p>

<script>
let x = 0.2 + 0.1;
document.getElementById("demo1").innerHTML = "0.2 + 0.1 = " + x;
let y = (0.2*10 + 0.1*10) / 10;
document.getElementById("demo2").innerHTML = "0.2 + 0.1 = " + y;
</script>

</body>
</html>




Προσθήκη αριθμών και συμβολοσειρών

ΠΡΟΕΙΔΟΠΟΙΗΣΗ!!

Η JavaScript χρησιμοποιεί τον τελεστή + τόσο για πρόσθεση όσο και για συνένωση.

Προστίθενται αριθμοί. Οι χορδές συνδέονται.

Εάν προσθέσετε δύο αριθμούς, το αποτέλεσμα θα είναι ένας αριθμός:

Παράδειγμα

let x = 10;
let y = 20;
let z = x + y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>If you add two numbers, the result will be a number:</p>

<p id="demo"></p>

<script>
let x = 10;
let y = 20;
let z = x + y;
document.getElementById("demo").innerHTML = z;
</script>

</body>
</html>


Εάν προσθέσετε δύο χορδές, το αποτέλεσμα θα είναι μια συνένωση συμβολοσειρών:

Παράδειγμα

let x = "10";
let y = "20";
let z = x + y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>If you add two numeric strings, the result will be a concatenated string:</p>

<p id="demo"></p>

<script>
let x = "10";
let y = "20";
let z = x + y;
document.getElementById("demo").innerHTML = z;
</script>

</body>
</html>


Εάν προσθέσετε έναν αριθμό και μια συμβολοσειρά, το αποτέλεσμα θα είναι μια συνένωση συμβολοσειρών:

Παράδειγμα

let x = 10;
let y = "20";
let z = x + y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>If you add a number and a numeric string, the result will be a concatenated string:</p>

<p id="demo"></p>

<script>
let x = 10;
let y = "20";
let z = x + y;
document.getElementById("demo").innerHTML = z;
</script>

</body>
</html>


Εάν προσθέσετε μια συμβολοσειρά και έναν αριθμό, το αποτέλεσμα θα είναι μια συνένωση συμβολοσειρών:

Παράδειγμα

let x = "10";
let y = 20;
let z = x + y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>If you add a numeric string and a number, the result will be a concatenated string:</p>

<p id="demo"></p>

<script>
let x = "10";
let y = 20;
document.getElementById("demo").innerHTML = "The result is: " + x + y;
</script>

</body>
</html>


Ένα συνηθισμένο λάθος είναι να περιμένετε αυτό το αποτέλεσμα να είναι 30:

Παράδειγμα

let x = 10;
let y = 20;
let z = "The result is: " + x + y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>A common mistake is to expect this result to be 30:</p>

<p id="demo"></p>

<script>
var x = 10;
var y = 20;
document.getElementById("demo").innerHTML =
"The result is: " + x + y;
</script>

</body>
</html>


Ένα συνηθισμένο λάθος είναι να περιμένουμε αυτό το αποτέλεσμα να είναι 102030:

Παράδειγμα

let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>A common mistake is to expect this result to be 102030:</p>

<p id="demo"></p>

<script>
let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;
document.getElementById("demo").innerHTML = result;
</script>

</body>
</html>


Ο διερμηνέας JavaScript λειτουργεί από αριστερά προς τα δεξιά.

Το πρώτο 10 + 20 προστίθεται επειδή το x και το y είναι και οι δύο αριθμοί.

Τότε το 30 + "30" συνενώνεται επειδή το z είναι μια συμβολοσειρά.


Αριθμητικές συμβολοσειρές

Οι συμβολοσειρές JavaScript μπορούν να έχουν αριθμητικό περιεχόμενο:

let x = 100;         // x is a number

let y = "100";       // y is a 
string

Η JavaScript θα προσπαθήσει να μετατρέψει τις συμβολοσειρές σε αριθμούς σε όλες τις αριθμητικές πράξεις:

Αυτό θα λειτουργήσει:

let x = "100";
let y = "10";
let z = x / y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>JavaScript will try to convert strings to numbers when dividing:</p>

<p id="demo"></p>

<script>
let x = "100";
let y = "10";
let z = x / y;   
document.getElementById("demo").innerHTML = z;
</script>

</body>
</html>

Αυτό θα λειτουργήσει επίσης:

let x = "100";
let y = "10";
let z = x * y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>JavaScript will try to convert strings to numbers when multiplying:</p>

<p id="demo"></p>

<script>
let x = "100";
let y = "10";
let z = x * y;   
document.getElementById("demo").innerHTML = z;
</script>

</body>
</html>

Και αυτό θα λειτουργήσει:

let x = "100";
let y = "10";
let z = x - y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>JavaScript will try to convert strings to numbers when subtracting:</p>

<p id="demo"></p>

<script>
let x = "100";
let y = "10";
let z = x - y;   
document.getElementById("demo").innerHTML = z;
</script>

</body>
</html>

Αλλά αυτό δεν θα λειτουργήσει:

let x = "100";
let y = "10";
let z = x + y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>JavaScript will NOT convert strings to numbers when adding:</p>

<p id="demo"></p>

<script>
let x = "100";
let y = "10";
let z = x + y;   
document.getElementById("demo").innerHTML = z;
</script>

</body>
</html>

Στο τελευταίο παράδειγμα η JavaScript χρησιμοποιεί τον τελεστή + για να συνδέσει τις συμβολοσειρές.


NaN - Όχι ένας αριθμός

Το NaN είναι μια δεσμευμένη λέξη JavaScript που υποδεικνύει ότι ένας αριθμός δεν είναι νόμιμος αριθμός.

Η προσπάθεια να κάνετε αριθμητική με μια μη αριθμητική συμβολοσειρά θα έχει ως αποτέλεσμα NaN (Όχι Αριθμός):

Παράδειγμα

let x = 100 / "Apple";

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>A number divided by a non-numeric string becomes NaN (Not a Number):</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 100 / "Apple";
</script>

</body>
</html>

Ωστόσο, εάν η συμβολοσειρά είναι αριθμητική, το αποτέλεσμα θα είναι α αριθμός:

Παράδειγμα

let x = 100 / "10";

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>A number divided by a numeric string becomes a number:</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 100 / "10";
</script>

</body>
</html>

Μπορείτε να χρησιμοποιήσετε την καθολική συνάρτηση JavaScript isNaN() για να μάθετε αν μια τιμή δεν είναι αριθμός:

Παράδειγμα

let x = 100 / "Apple";
isNaN(x);

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>You can use the global JavaScript function isNaN() to find out if a value is not a number:</p>

<p id="demo"></p>

<script>
let x = 100 / "Apple";
document.getElementById("demo").innerHTML = isNaN(x);
</script>

</body>
</html>

Προσέξτε το NaN. Εάν χρησιμοποιείτε το NaN σε μια μαθηματική πράξη, το αποτέλεσμα θα είναι επίσης NaN:

Παράδειγμα

let x = NaN;
let y = 5;
let z = x + y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>If you use NaN in a mathematical operation, the result will also be NaN:</p>

<p id="demo"></p>

<script>
let x = NaN;
let y = 5;
document.getElementById("demo").innerHTML = x + y;
</script>

</body>
</html>

Ή το αποτέλεσμα μπορεί να είναι μια συνένωση όπως το NaN5:

Παράδειγμα

let x = NaN;
let y = "5";
let z = x + y;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>If you use NaN in a mathematical operation, the result can be a concatenation:</p>

<p id="demo"></p>

<script>
let x = NaN;
let y = "5";
document.getElementById("demo").innerHTML = x + y;
</script>

</body>
</html>

Το NaN είναι ένας αριθμός: τύπος NaN επιστρέφει αριθμό:

Παράδειγμα

typeof NaN;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>The typeof NaN is number:</p>

<p id="demo"></p>

<script>
let x = NaN;
document.getElementById("demo").innerHTML = typeof x;
</script>

</body>
</html>



Απειρο

Άπειρο (ή -Infinity) είναι η τιμή που θα επιστρέψει η JavaScript αν υπολογίσετε έναν αριθμό εκτός του μεγαλύτερου πιθανός αριθμός.

Παράδειγμα

let myNumber = 2;
// Execute until Infinity
while (myNumber != Infinity) {
    myNumber = myNumber * myNumber;
}

Η διαίρεση με το 0 (μηδέν) δημιουργεί επίσης Άπειρο:

Παράδειγμα

let x =  2 / 0;
let y = -2 / 0;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>Division by zero generates Infinity;</p>

<p id="demo"></p>

<script>
let x = 2/0;
let y = -2/0;
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


Το Infinity είναι ένας αριθμός: τύπος Infinity επιστρέφει αριθμό.

Παράδειγμα

typeof Infinity;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>Infinity is a number:</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = typeof Infinity;
</script>

</body>
</html>



Δεκαεξαδικό

Η JavaScript ερμηνεύει τις αριθμητικές σταθερές ως δεκαεξαδικές αν προηγούνται 0x.

Παράδειγμα

let x = 0xFF;

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>Numeric constants, preceded by 0x, are interpreted as hexadecimal:</p>

<p id="demo"></p>

<script>
let x = 0xFF;
document.getElementById("demo").innerHTML = "0xFF = " + x;
</script>

</body>
</html>


Μην γράφετε ποτέ έναν αριθμό με μηδέν (όπως το 07).
Ορισμένες εκδόσεις JavaScript ερμηνεύουν οι αριθμοί ως οκταδικοί αν είναι γραμμένοι με μηδέν.

Από προεπιλογή, η JavaScript εμφανίζει αριθμούς ως βασικά 10 δεκαδικά.

Αλλά μπορείτε να χρησιμοποιήσετε τη μέθοδο toString() για να εξάγετε αριθμούς από τη βάση 2 στη βάση 36.

Το δεκαεξαδικό είναι βάση 16. Ο δεκαδικός είναι βάση 10. Το οκταδικό είναι βάση 8. Το δυαδικό είναι βάση 2.

Παράδειγμα

let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(12);
myNumber.toString(10);
myNumber.toString(8);
myNumber.toString(2);

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>The toString() method can output numbers from base 2 to 36:</p>

<p id="demo"></p>

<script>
let myNumber = 32;
document.getElementById("demo").innerHTML =
"Decimal 32 = " + "<br><br>" + 

"Hexatrigesimal (base 36): " + myNumber.toString(36) + "<br>" +
"Duotrigesimal (base 32): " + myNumber.toString(32) + "<br>" +
"Hexadecimal (base 16): " + myNumber.toString(16) + "<br>" +
"Duodecimal (base 12): " + myNumber.toString(12) + "<br>" +
"Decimal (base 10): " + myNumber.toString(10) + "<br>" +
"Octal (base 8): " + myNumber.toString(8) + "<br>" +
"Binary (base 2): " + myNumber.toString(2);
</script>

</body>
</html>

Οι αριθμοί JavaScript ως αντικείμενα

Κανονικά οι αριθμοί JavaScript είναι πρωτόγονες τιμές που δημιουργούνται από κυριολεκτικά:

let x = 123;

Αλλά οι αριθμοί μπορούν επίσης να οριστούν ως αντικείμενα με τη λέξη-κλειδί new:

let y = new Number(123);

Παράδειγμα

let x = 123;
let y = new Number(123);

Μην δημιουργείτε αντικείμενα Number.

Η λέξη-κλειδί new περιπλέκει τον κώδικα και επιβραδύνει την ταχύτητα εκτέλεσης.

Τα Αριθμητικά Αντικείμενα μπορούν να παράγουν απροσδόκητα αποτελέσματα:

Όταν χρησιμοποιείτε τον τελεστή ==, τα x και y είναι ίσα:

let x = 500;
let y = new Number(500);

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>Numbers and Number objects cannot be safely compared:</p>

<p id="demo"></p>

<script>
// x is a number
let x = 500;

// y is an object
let y = new Number(500);
document.getElementById("demo").innerHTML = (x==y);
</script>

</body>
</html>

Όταν χρησιμοποιείτε τον τελεστή ===, το x και το y δεν είναι ίσα.

let x = 500;
let y = new Number(500);

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>Numbers and Number objects cannot be safely compared:</p>

<p id="demo"></p>

<script>
// x is a number
let x = 500;

// y is an object
let y = new Number(500);

document.getElementById("demo").innerHTML = (x===y);
</script>

</body>
</html>

Σημειώστε τη διαφορά μεταξύ του (x==y) και του (x===y).

(x == y) true ή false;

let x = new Number(500);
let y = new Number(500);

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>JavaScript objects cannot be compared:</p>

<p id="demo"></p>

<script>
// x is an object
let x = new Number(500);

// y is an object
let y = new Number(500);

document.getElementById("demo").innerHTML = (x==y);
</script>

</body>
</html>

(x === y) true ή false;

let x = new Number(500);
let y = new Number(500);

Δοκιμάστε το μόνοι σας →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>JavaScript objects cannot be compared:</p>

<p id="demo"></p>

<script>
// x is an object
let x = new Number(500);

// y is an object
let y = new Number(500);

document.getElementById("demo").innerHTML = (x===y);
</script>

</body>
</html>

Η σύγκριση δύο αντικειμένων JavaScript πάντα επιστρέφει false.

Συμπληρώστε την αναφορά αριθμού JavaScript

Για πλήρη αναφορά στον Αριθμό, επισκεφθείτε τη διεύθυνση:

Συμπληρώστε την αναφορά αριθμού JavaScript.

Η αναφορά περιέχει περιγραφές και παραδείγματα όλων των ιδιοτήτων και μεθόδων του Αριθμού.