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

 

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

Regional problems Decimal to String

Îåêßíçóå áðü ôï ìÝëïò Δημήτρης Μπούνδρης. Τελευταία δημοσίευση από το μέλος Δημήτρης Μπούνδρης στις 17-02-2012, 11:23. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-02-2012, 17:24 69350

    Regional problems Decimal to String

    Διαβάζω και αποθηκεύω σε ένα DataTable τιμές decimal από ένα text αρχείο.

    Το text αρχείο έχει τιμές «305,10» με κόμμα.

     

    Εν συνεχεία τα μετατρέπω σε decimal , κάνω κάποιες αριθμητικές πράξεις και εν συνεχεία το γράφω σε ένα textbox.

     

    Το πρόβλημα όπως μπορεί να έχετε ήδη φανταστεί είναι τα regional settings.

    Σε εμένα τα δεκαδικά διαχωρίζονται με κόμμα «,» και παίζει σωστα. Σε ένα άλλο pc που διαχωρίζονται με τέλεια «.» όχι.

     

    Έκανα replace ‘,’ σε ‘.’ και διόρθωσα το πρόβλημα αν και αυτό δεν το θεωρώ ορθή λύση.

    Έχετε να προτείνετε κάτι;


    Dimitris Boundris
    Software Engineer
  •  16-02-2012, 17:54 69352 σε απάντηση της 69350

    Απ: Regional problems Decimal to String

    Από τη στιγμή που διαβάζεις τιμές από ένα αρχείο, θα πρέπει είτε να έχεις καθορίσει εκ των προτέρων ποιό θα είναι το σύμβολο της υποδιαστολής είτε να ρωτάς το χρήστη. Αυτό σημαίνει ότι είτε θα πρέπει να απαιτήσεις το αρχείο να έχει πάντα συγκεκριμένη υποδιαστολή (π.χ. το "." ) ή να ρωτάς π.χ. με κάποιο dialog box ποιά θα είναι η υποδιαστολή. Αν έχεις προσέξει, κάτι τέτοιο κάνει π.χ. και το Excel.

    Από εκεί και πέρα, όταν κάνεις τη μετατροπή π.χ. με την decimal.Parse θα πρέπει να χρησιμοποιείς τη μορφή που δέχεται συγκεκριμένο CultureInfo αντί για το default του συστήματος. Για παράδειγμα, για να κάνεις parse με υποδιαστολή το "." μπορείς να χρησιμοποιήσεις το InvariantCulture:
    var input= "1243.56";
    var value = decimal.Parse(input, CultureInfo.InvariantCulture);
    Αν θέλεις η υποδιαστολή να προσδιορίζεται από το χρήστη, θα πρέπει να φτιάξεις το δικό σου CultureInfo όπως παρακάτω:
    var input= "1243,56";
    var myCulture = new CultureInfo("");
    myCulture.NumberFormat.NumberDecimalSeparator = ",";
    myCulture.NumberFormat.NumberGroupSeparator = ".";
    var value = decimal.Parse(input, myCulture);


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  16-02-2012, 18:43 69353 σε απάντηση της 69352

    Απ: Regional problems Decimal to String

    Τα ποσά ερχονται με υποδιαστολή κομμα παντα.

    Αρα χρησιμοποιόντας το παρακάτω θα παιζει πάντα χωρις να χρειαζεται να κανω replace;

     

    var input= "1243,56";
    var myCulture = new CultureInfo("");
    myCulture.NumberFormat.NumberDecimalSeparator = ",";
    myCulture.NumberFormat.NumberGroupSeparator = ".";
    var value = decimal.Parse(input, myCulture);


    Dimitris Boundris
    Software Engineer
  •  16-02-2012, 19:18 69354 σε απάντηση της 69353

    Απ: Regional problems Decimal to String

    Αν το txt αρχείο το παράγει ο χρήστης, δε μπορείς να είσαι σίγουρος ότι θα χρησιμοποιεί πάντα το κόμμα σαν υποδιαστολή. Τι θα σου στοιχίσει να βάλεις ένα combo για να επιλέγεις το σύμβολο της υποδιαστολής προκειμένου να έχεις το κεφάλι σου ήσυχο;

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  17-02-2012, 11:23 69357 σε απάντηση της 69354

    Απ: Regional problems Decimal to String

    Ευχαριστώ ρε παιδια
    Dimitris Boundris
    Software Engineer
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems