Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πρόβλημα με double στην C++

Îåêßíçóå áðü ôï ìÝëïò gspiros. Τελευταία δημοσίευση από το μέλος agmarios στις 16-07-2007, 16:04. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  14-07-2007, 21:12 33591

    Πρόβλημα με double στην C++

    Λοιπόν, έχω φτιάξει μια συνάρτηση για να μετατρέπει ένα double, σε double με 2 δεκαδικά ψηφία.
    Ορίστε η συνάρτηση.

    double convert(double point)
    {
        int temp=floor(point*100);
        return (double)temp/100;
    }

    το πρόβλημά μου είναι το εξής:
    όταν την καλώ σαν convert((.38-.33)/5), δίνει 0.0000
    όταν όμως την καλώ σαν convert(-(.38-.33)/5), δίνει -0.01000

    πώς γίνεται αυτό?

    υπάρχει καμιά ασφαλής παρόμοια συνάρτηση?
  •  16-07-2007, 15:16 33616 σε απάντηση της 33591

    Απ: Πρόβλημα με double στην C++

    Το πρόβλημα είναι στο ότι το ((0.38-0.33)/5)*100 δεν σου δίνει τη τιμή 1, παρόλο που αν το τυπώσεις θα εμφανίσει το 1. Είναι ένα παράδοξο της C, που για να πω την αλήθεια το ήξερα για τους float και όχι για τους double. Κάνε έναν έλεγχο να το δεις.

    Μπορείς να γράψεις το double σου σε ένα string με δύο δεκαδικά και μετά να το ξανακάνεις double. Δες αυτό:

    #include <iostream>
    #include <math.h>

    double
    convert(double point)
    {
      char s[100];   //Define the size you want
      double temp;

      sprintf(s, "%.2e\n", point);
      temp = atof(s);
      return temp;
    }


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  16-07-2007, 16:04 33620 σε απάντηση της 33591

    Απ: Πρόβλημα με double στην C++

    Η λειτουργία της είναι σωστή. Η floor του -0.06 είναι -1 (ο αμέσως μικρότερος ακέραιος) και όχι 0 (το ακέραιο μέρος)

    Νομίζω ότι πρέπει να χρησιμοποιήσεις την truncate
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems