Προς το περιεχόμενο

PHP: Προσοχή στις συγκρίσεις μεταξύ float και int αριθμούς!


kalexan

Προτεινόμενες αναρτήσεις

Δημοσ.

Δεν ξέρω εάν έχει τύχει σε κανέναν αλλά κοιτάξτε το αποτέλεσμα του παρακάτω κώδικα.

 

$amount = 9.95;

echo $amount. " ,type: " . gettype($amount) . "\n"; //τυπώνει 9.95 ,type: double

$amount = $amount * 100;

echo $amount. " ,type: " . gettype($amount) . "\n"; //τυπώνει 995 ,type: double

$amount = (int)$amount; // or try: $amount = intval($amount);

echo $amount. " ,type: " . gettype($amount) . "\n"; //τυπώνει 994 ,type: integer!!!!!!!

 

Όπως αναφέρεται και στο online documentation της PHP, αυτό συμβαίνει σε κλάσματα (ή αποτελέσματα πράξεων) που παράγουν αριθμούς με άπειρα δεκαδικά ψηφία (o αριθμός ως float χάνει την ακρίβειά του). Προφανώς, όμως, η τιμή 9.95 έχει πεπερασμένα. Το παραπάνω συμβαίνει και σε άλλους αριθμούς.

 

Δεν είναι να τραβάς τα μαλιά σου?!?!?!?

Δημοσ.

Όχι δεκαδικά στο δεκαδικό σύστημα.

Δεκαδικά ψηφία στο δυαδικό σύστημα.

 

Π.χ. το 9,95 μπορεί να είναι 9,9499999999999999999, οπότε με τις πράξεις και τη στρογγυλοποίηση να βγαίνει 994.

 

Δεν είναι θέμα της php, έτσι δουλεύουν όλοι οι επεξεργαστές. Δες το θέμα για floating point numbers στη wikipedia για να καταλάβεις το format τους.

Δημοσ.
Όχι δεκαδικά στο δεκαδικό σύστημα.

Δεκαδικά ψηφία στο δυαδικό σύστημα.

 

Π.χ. το 9,95 μπορεί να είναι 9,9499999999999999999, οπότε με τις πράξεις και τη στρογγυλοποίηση να βγαίνει 994.

 

Δεν είναι θέμα της php, έτσι δουλεύουν όλοι οι επεξεργαστές. Δες το θέμα για floating point numbers στη wikipedia για να καταλάβεις το format τους.

 

Lol (αναφερομε στη ΓΛΩΣΣΑ) Κειτα αλαγες που καναν στον επεξεργαστη κειμενου.

Αρχειοθετημένο

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

  • Δημιουργία νέου...