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

 

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

float numbers σε C#

Îåêßíçóå áðü ôï ìÝëïò DUDE!!. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 12-09-2009, 00:44. Υπάρχουν 15 απαντήσεις.
Σελίδα 1 από 2 (16 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  03-09-2009, 23:47 53468

    float numbers σε C#

    φτιάχνω ένα πίνακα float ώς εξής: float[] data = new float[] {34,5 , 34,6 , 23,5};
    το πρόβλημα μου είναι πως θέλω να δηλώσω τους δεκαδικούς με τελεια (.) και όχι με κόμμα αλλά δεν τους δέχεται.
    γνωρίζει κανείς κάποιον τρόπο να το κάνω????
  •  04-09-2009, 00:13 53469 σε απάντηση της 53468

    Απ: float numbers σε C#

    Τί εννοείς δεν τους δέχεται? Ο μόνος τρόπος να τους δώσεις είναι με τελεία. Αν κάτι δεν σου δουλεύει θα πρέπει πάντα να κοιτάζεις τί λέει το μήνυμα λάθους και να μας το λες. Διαφορετικά δεν πρόκειται να βγάλει κανείς άκρη, ειδικά όταν από την ερώτηση δεν βγαίνει συμπέρασμα.

    Ευτυχώς εδώ μιλάμε για μία και μόνο γραμμή κώδικα, η οποία γυρίζει εντελώς ξεκάθαρο μήνυμα λάθους, το οποίο μάλιστα σου λέει και πως να το διορθώσεις! Αν αντικαταστήσω τα κόμματα με τελείες ( float[] data = new float[] {34.5 , 34.6 , 23.5}; ) θα πάρω το παρακάτω μήνυμα λάθους, το οποίο και μου λέει τί συμβαίνει, και πως να το διορθώσω:

    Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix to create a literal of this type

    Αυτό που συμβαίνει είναι το εξής. Αν δώσω ένα αριθμό με δεκαδικό η C# θεωρεί αυτομάτως ότι είναι double. Ο πίνακας όμως έχει οριστεί ως float, οπότε δεν μπορεί να μετατραπεί το 34.5 σε float. Για να μπορέσω να περάσω τις τιμές ως float θα πρέπει να βάλω το F μετά από κάθε αριθμό, να γράψω δηλαδή 34.5F. Έτσι ο παρακάτω κώδικας θα δουλέψει:

    float[] data = new float[] {34.5F , 34.6F , 23.5F};


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-09-2009, 00:28 53470 σε απάντηση της 53469

    Απ: float numbers σε C#

    παναγιώτη thanks αυτό ήταν και sorry που η ερώτηση μ είχε ασαφεια.
    λοιπόν να ρωτησω κάτι πάλι για τον τύπο δεδομένων float. θα προσπαθήσω να είμαι πιο σαφείς.
    έχω έναν πίνακα string με 10 αλφαριθμητικά που είναι αριθμοί.
    με την παρακάτω εντολή τους μετατρέπω σε float και τους αποθηκεύω σε έναν πίνακα float[10]

    for (int i = 0; i < 10; i++)
            {
                fdataIdea = float.Parse(sdataIdea, CultureInfo.InvariantCulture);
            }

    το πρόβλημα είναι πως κατα την μετατροπή τους αριθμούς τους αποθηκεύει με ,(κόμμα) και όχι με τελεια(.). μπορώ κατα την μετατροπή να ορίσω ότι η υποδιαστολή θα είναι με τελεία και όχι με κόμμα???

    ελπίζω να έγινε κατανοητός. αν όχι ρωτήστε ότι δεν καταλάβατε

    thanks
  •  04-09-2009, 00:56 53471 σε απάντηση της 53470

    Απ: float numbers σε C#

    Αυτό που λες δεν μπορεί να συμβαίνει. Το αντίστροφο μπορεί. Οι αριθμοί δεν αποθηκεύονται με κάποιο συγκεκριμένο σύμβολο υποδιαστολής. Στην πραγματικότητα οι float και double αποθηκεύονται με εκθετική μορφή. Για παράδειγμα ο float είναι 32 bit από τα οποία τα 8 είναι εκθέτης με βάση το 10 και τα άλλα 23 αναπαριστούν ένα δεκαδικό αριθμό μεταξύ 0 και 1.

    Αυτό που μπορεί να συμβαίνει είναι τα string σου να περιέχουν ήδη κόμματα αντί για τελείες. Στο Invariant Culture το δεκαδικό είναι πάντα η τελεία. Αν προσπαθήσεις να κάνεις parse π.χ. το 3,4 θα χτυπήσει. Αν θέλεις να κάνεις parse σε string που περιέχουν αριθμούς με ελληνικό format θα πρέπει να χρησιμοποιήσεις το Greek culture αντί για το Invariant


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-09-2009, 01:18 53472 σε απάντηση της 53471

    Απ: float numbers σε C#

    λοιπόν το string είναι με . , αλλά εάν τα κάνω parse και επιλέξω currentculture η τπτ δεν διαβάζει την υποδιαστολή. δλδ τον αριθμό 34.5 τον κάνει parse και τον μετατρέπει σε 345.
    την επιλογή greek culture δεν την έχει ώς επιλογή. μήπως πρέπει να προσθέσω using κατι στην αρχή????

  •  04-09-2009, 01:53 53474 σε απάντηση της 53472

    Απ: float numbers σε C#

    βασικά για να το κάνω πιο απλό προσπαθω να δώ πως μπορω να μετατρέψω για παραδειγμα το string 45.6 σε float αλλά η υποδιαστολή να είναι τελεία και όχι κόμμα.
    με την εντολή float.parse("45.6") ο float αριθμός που πέρνω είναι 456 χωρίς υποδιαστολή
    με την εντολή float.parse("45.6", CultureInfo.Invariantculture) το μετατρέπει αλλά χρησιμοποιεί για υποδιαστολή κόμμα και όχι τελεία... any ideas....?

  •  04-09-2009, 10:54 53482 σε απάντηση της 53474

    Απ: float numbers σε C#

    Η δεύτερη γραμμή το μετατρέπει σωστά. Ο λόγος που το "βλέπεις" με κόμμα είναι επειδή όταν σου το "παρουσιάζει" χρησιμοποιεί τα δικά σου regional settings, τα ελληνικά. Κάπως πρέπει να σου το παρουσιάσει κι αυτό το καημένο το .NET. Προτιμάς να σου δείξει την εσωτερική binary αναπαράσταση του float number;
  •  04-09-2009, 15:02 53484 σε απάντηση της 53482

    Απ: float numbers σε C#

    μάλλον έχεις λάθος και δεν μου το παρουσιάζει σωστά. τι θέλω να πω.

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

    άρα πιστευω ότι κανονικά θα υπάρχει ένας τρόπος ώστε κατα το parse να μετατρέψεις τα string σε float και να ορίσεις την υποδιαστολή να είναι τελεία και όχι κόμμα. αυτο ψάχνω
  •  04-09-2009, 15:23 53486 σε απάντηση της 53484

    Απ: float numbers σε C#

    Σε αυτή την περίπτωση σου προτείνω να διαβάσεις εδώ για την αναπαράσταση των floating-point αριθμών, ίσως σε βοηθήσουν.
  •  07-09-2009, 15:43 53519 σε απάντηση της 53486

    Απ: float numbers σε C#

    το είδα αυτό αλλά δεν βοήθησε. αυτό που θέλω είναι έναν τρόπο οταν μετατρέπω το string 14.45 σε float, η υποδιαστολή να είναι τελεία και όχι κόμμα. αυτό. τώρα άν δεν υπάρχει κάποιος τρόπος θα κοιτάξω αλλού μήπως μπορώ να αλλάξω το πρόγραμμα.
  •  07-09-2009, 16:39 53531 σε απάντηση της 53519

    Απ: float numbers σε C#

    Αμφιβάλλω ότι το πρόβλημα σου βρίσκεται στο parse,εγώ στην θέση σου θα κοιτούσα πως περνάνε οι αριθμοί στο api για να κάνει τους υπολογισμούς.Επειδή δεν το έχω χρησιμοποιήσει ποτέ δεν ξέρω,αλλά αν οι floats μετατρέπονται σε string για να περαστούν στο API-οπότε και τα regional settings σου θα έχουν ως υποδιαστολή το κόμμα- θα μπορούσε να αιτιολογηθεί το πρόβλημα.

  •  10-09-2009, 16:18 53616 σε απάντηση της 53531

    Απ: float numbers σε C#

    Μια πιθανή λύση στο πρόβλημά σου,παρόλο που βασίζεται στην εικασία ότι το πρόβλημα έγκειται στο ότι οι τιμές μετατρέπονται σε string για να εισαχθούν στο API:

    Πρώτα δήλωσε τα εξής namespaces:

    using System.Threading;
    using System.Globalization;

    Στην αρχή του προγράμματός σου,πριν δοκιμάσεις οτιδήποτε με το API πρόσθεσε τα εξής:

                CultureInfo ci = new CultureInfo("el-GR", true);
                ci.NumberFormat.NumberDecimalSeparator = ".";
                Thread.CurrentThread.CurrentCulture = ci;
    Έτσι κρατώντας όλα τα regional settings της ελληνικής culture,σιγουρεύεσαι ότι η τελεία χρησιμοποιείται ως υποδιαστολή και όχι το κόμμα.
  •  10-09-2009, 16:31 53617 σε απάντηση της 53616

    Απ: float numbers σε C#

    darklynx, είμαι 100000% σίγουρος ότι εκεί βρίσκεται το πρόβλημα του DUDE. Οι αριθμοί στο .NET (και σε οποιαδήποτε γλώσσα) δεν επηρεάζονται από τα regional settings. Αυτό που επηρεάζται είναι πως γίνεται η μετατροπή από και προς string. Προφανώς ο DUDE κάπου κάνει μία μετατροπή παραπάνω. Μέχρι να δει πού συμβαίνει αυτό, δεν μπορούμε να τον βοηθήσουμε. Επίσης, όσο επιμένει ότι το πρόβλημα είναι στην αναπαράσταση των αριθμών και όχι στα strings, πάλι το πρόβλημα δεν θα λυθεί.

    Η μόνη περίπτωση να τον βοηθήσουμε πλέον είναι να μας δείξει όλο τον κώδικα που δημιουργεί και χρησιμοποιεί τους πίνακες μήπως δούμε που υπάρχει η παρανόηση. Και όλο σημαίνει, αν τα δεδομένα έρχονται από textbox, να φαίνεται. Αν έρχονται από αρχείο, να φαίνεται και αυτό.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-09-2009, 16:54 53618 σε απάντηση της 53617

    Απ: float numbers σε C#

    Το google chart API δέχεται όλα τα requests ως url,οπότε τα float numbers μόνο ως strings τα δέχεται.Υπέθεσα λοιπόν ότι η library-wrapper που χρησιμοποιεί κάνει εσωτερικά τις μετατροπές πριν τις στείλει ως request και γι'αυτό ο DUDE μπερδεύτηκε τόσο,αφού από τη δική του οπτική γωνία μόνο με float εργάζεται. 

  •  11-09-2009, 18:23 53642 σε απάντηση της 53618

    Απ: float numbers σε C#

    Επειδη πραγματικα με έχει ζορίσει πολύ το συγκεκριμένο project με το googlechartapi έχει κάποιος την όρεξη να ανεβάσω τον κώδικα και να τον τρέξει μήπως βγάλω επιτέλους καμία άκρη ρε παιδιά???Tongue Tied
Σελίδα 1 από 2 (16 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems