panospc Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 Όταν είμαι σε Vista και εκτελέσω το εξής >float f = float.parse("0,132") το f μου επιστρέφει 132 αντί για 0.132. Εάν αντικαταστήσω το κόμμα με τελεία τότε δουλεύει κανονικά και μου επιστρέφει 0.132 >float f = float.parse("0.132") Εάν τρέξω το ίδιο πράγμα σε Windows 7 έχω τα αντίθετα αποτελέσματα. Το πρώτο παράδειγμα μου επιστρέφει 0.132 ενώ το δευτερο 132 Γιατί στα Vista το κάνει parse με τελεία ενώ στα Windows 7 θέλει κόμμα; Έχει γίνει καμιά αλλαγή η έχει πρόβλημα κάποια από τις εγκαταστάσεις μου;
virxen75 Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 μήπως έχει να κάνει με τα regional settings?
panospc Δημοσ. 31 Οκτωβρίου 2009 Μέλος Δημοσ. 31 Οκτωβρίου 2009 Ναι δίκιο έχεις... Εγώ όμως τι πρέπει να κάνω ώστε να δουλεύει σε υπολογιστές με διαφορετικά regional settings; Θέλω να αποθηκεύω και να φορτώνω διάφορες τιμές float σε κάποιο XML αρχείο και παίρνω διαφορετικά αποτελέσματα εάν αλλάζουν τα regional settings... Να φτιάξω δικές μου συναρτήσεις που να κάνουν parse;
Evgenios1 Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 Τσεκαρε αυτο και πες. >using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { NumberFormatInfo f = new NumberFormatInfo(); f.NumberDecimalSeparator = "."; float s = float.Parse("1.22321",f); Console.WriteLine(s); Console.Read(); } } } ---------- Το μήνυμα προστέθηκε στις 18:13 ---------- Οπα, τωρα ειδα οτι αναφερεσε για διαφορετικο αποτελεσμα απο vista σε 7. Τσεκαρε αυτο τοτε, ειναι το πως γραφεται ανα χωρα., >using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { CultureInfo cl = new CultureInfo("el-GR"); float s = float.Parse("1[color="Red"],[/color]22321",cl); Console.WriteLine(s); Console.Read(); } } } .....
panospc Δημοσ. 31 Οκτωβρίου 2009 Μέλος Δημοσ. 31 Οκτωβρίου 2009 Και τα 2 παραδείγματα σωστά δουλευουν απλώς στο πρώτο παράδειγμα όταν θέλω να αποθηκεύσω κάποιο float σε string θα πρέπει να δίνω και το NumberFormatInfo ωστε να εξασφαλίσω ότι θα αποθηκεύεται με τον ίδιο τρόπο σε όλα τα regional settings >NumberFormatInfo nfi = new NumberFormatInfo(); nfi.NumberDecimalSeparator = "."; float f = 1.132f; string s = f.ToString(nfi); f = float.Parse(s, nfi); Ευχαριστώ.
Evgenios1 Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 Εαν κανεις XLINQ δες το παρακατω. > static void Main(string[] args) { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("el-GR"); /* coding... * * * XmlSerializer ser = new XmlSerializer(typeof(myXLINQclass)); * */ }
teo64x Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 > CultureInfo cl = new CultureInfo("el-GR"); float s = float.Parse("1[color="Red"],[/color]22321",cl); Τι θεϊκή γλώσσα ρε γμτ.
kagelos Δημοσ. 31 Οκτωβρίου 2009 Δημοσ. 31 Οκτωβρίου 2009 Αν αποθηκεύεις τις τιμές σε αρχείο με μορφή κειμένου, καλύτερα να μην καλείς απλά την .ToString() χωρίς format. Διότι αν εγώ έχω στο PC Ελληνικά και σώσω π.χ το 1,5 και στη συνέχεια το αλλάξω σε United States και πάω να ανοίξω αυτό που έσωσα, δεν θα ανοίγει. Όπως είπε ο Ευγένιος πιο πάνω, φτιάξε ένα NumberFormatInfo και να καλείς την ToString με αυτό σαν παράμετρο. Επίσης να το χρησιμοποιείς και στην .Parse();
Evgenios1 Δημοσ. 1 Νοεμβρίου 2009 Δημοσ. 1 Νοεμβρίου 2009 Τι θεϊκή γλώσσα ρε γμτ. Αστα να πανε..... Μερικες φορες αναρωτιεμαι: "Προγραμματιζω, ή λεω σε καποιον το τι θελω και μου το δινει ετοιμο"
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.