Αριθμοί κινητής υποδιαστολής
Αριθμοί κινητής υποδιαστολής (συμβολίζονται και ως "floats", "doubles" or "real numbers") μπορούν να προσδιοριστούν χρησιμοποιώντας οποιονδήποτε από τους ακόλουθους τρόπους σύνταξης:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM ( ({LNUM} | {DNUM}) [eE][+-]? {LNUM})
Ακρίβεια αριθμών κινητής υποδιαστολής
Συνηθίζεται σε απλές δεκαδικές παραστάσεις όπως 0.1 ή 0.7 να μην είναι εφικτή η μετατροπή τους σε εσωτερική δυαδική αντιστοίχιση χωρίς ένα μικρό χάσιμο σε ακρίβεια. Αυτό μπορεί να οδηγήσει σε διφορούμενα αποτελέσματα: για παράδειγμα, η floor((0.1+0.7)*10) συνήθως επιστρέφει 7 σε αντίθεση με το αναμενόμενο 8 αφού το αποτέλεσμα της εσωτερικής αναπαράστασης είναι κάτι σαν 7.9999999999....
Αυτό σχετίζεται με το γεγονός ότι είναι αδύνατο να εκφράσουμε ακριβώς μερικές παραστάσεις σε δεκαδική μορφή με έναν πεπερασμένο αριθμό ψηφίων. Για παράδειγμα, το 1/3 στη δεκαδική μορφή γίνεται 0.3333333. . ..
Συνεπώς μην εμπιστεύεστε ποτέ αποτελέσματα αριθμών κινητής υποδιαστολής μέχρι το τελευταίο ψηφίο και ποτέ μη συγκρίνεται για ισότητα αριθμούς κινητής υποδιαστολής. Αν θέλετε πραγματικά μεγαλύτερη ακρίβεια, θα πρέπει να χρησιμοποιείτε τις συναρτήσεις αυθαίρετης μαθηματικής ακρίβειας ή τη συνάρτηση gmp .
Μετατρέποντας σε αριθμό κινητής υποδιαστολής
Για περισσότερς πληροφορίες σχετικά με το πότε και πώς τα strings μετατρέπονται σε αριθμούς κινητής υποδιαστολής, δείτε το τμήμα με τον τίτλο Μετατροπή των strings σε αριθμούς. Για τιμές άλλων τύπων, η μετατροπή είναι η ίδια με αυτή που θα είχε η τιμή αν μετατρεπόταν πρώτα σε ακέραιο και μετά σε αριθμό κινητής υποδιαστολής. Δείτε το τμήμα Μετατρέποντας σε ακέραιο για περισσότερες πληροφορίες.