Νέα

Ανάγνωση δεκαδικών στη C#

  • Μέλος που άνοιξε το νήμα -
  • Ημερομηνία ανοίγματος
  • Απαντήσεις 8
  • Εμφανίσεις 892
  • Tagged users Καμία
  • Βλέπουν το thread αυτή τη στιγμή 1 άτομα (0 μέλη και 1 επισκέπτες)

Επισκέπτης
Καταρχάς το τμήμα του κώδικα πάρθηκε από εδώ και λειτουργεί σωστά, υπό την έννοια ότι πράγματι διαβάζει το 0.0004 ως 0,0004 και γίνονται οι σωστοί υπολογισμοί (έχω σβήσει επίτηδες ένα μέρος της φόρμας για να μη μπερδευτείτε).
Βέβαια, όταν τον εκτυπώσεις στην ετικέττα εμφανίζεται ως 0,0004 (όχι με τελεία αλλά με υποδιαστολή). Επί του παρόντος δε με απασχολεί και τόσο αυτό.
Εκείνος ο Gary Texmo στο τέλος της σελίδας πέταξε έναν συμπαγέστερο κώδικα, το οποίο δοκίμασα λίγο αλλά @@ρια.
Καμμιά ιδέα??
Ανεβάζω εικόνα για να καταστώ σαφής και το τμήμα του κώδικα είναι:


string numSeparator=System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
char numSepFromThis=' ',numSepToThis=' ';
if (numSeparator==".")
{
  numSepFromThis=',';
  numSepToThis='.';
}
else if (numSeparator==",")
{
  numSepFromThis='.';
  numSepToThis=',';
}
double diafora=double.Parse(text_diafora.Text.Trim().Replace(numSepFromThis,numSepToThis));


// Κάποιοι υπολογισμοί γίνονται εδώ κι εκτυπώνονται αποτελέσματα


label_info.Text=diafora.ToString();
 

Συνημμένα

  • jh.jpg
    jh.jpg
    25,7 KB · Εμφανίσεις: 42

qwerty1

Μέλος
Εγγρ.
14 Μαΐ 2006
Μηνύματα
55
Like
0
Πόντοι
0
καταρχήν ΜΗΝ κανεις αυτό "Replace" .
απλα καντο convert
πχ double a1 = Convert.ToDouble(text_diafora.Text)
κανε πρωτα τους ελεγχους ΑΝ ειναι νουμερα και όχι γραμματα στο textbox σου.

 

Boldemort

Σεβαστός
Εγγρ.
4 Σεπ 2009
Μηνύματα
47.532
Κριτικές
12
Like
36
Πόντοι
1.220
εχει ανεβει αλλο επιπεδο πλεον το φορουμ  :grin:
 

Επισκέπτης
Για ποιο λόγο να χρησιμοποιηθεί η Convert.ToDouble?
Κι αυτό το λέω διότι υπάρχει και η Parse που γίνεται στην περίπτωσή μας double.Parse(text_diafora.Text)
Μπλοκάροντας με σχόλια το τμήμα του ανωτέρω κώδικα και παίζοντας και με τις δύο αυτές εντολές, ο δεκαδικός δε διαβάζεται σωστά.
Δε μπορώ να θυμηθώ, στο διάολο κάπως με το namespace Globalization & CultureInfo γινόταν αυτόματα η δουλειά αυτή, το είχα κάνει παλιότερα, αλλά έλα που δεν κράτησα σημειώσεις....
Βέβαια επεμβαίνοντας στον Πίνακα Ελέγχου λύνεται το πρόβλημα (Ελληνικά Windows 7 έχει το σαράβαλο) και ο δεκαδικός διαβάζεται σωστά είτε με την Convert είτε με την Parse.
 

Συνημμένα

  • control panel.jpg
    control panel.jpg
    153 KB · Εμφανίσεις: 25

Boldemort

Σεβαστός
Εγγρ.
4 Σεπ 2009
Μηνύματα
47.532
Κριτικές
12
Like
36
Πόντοι
1.220
Δεν ασχολουμαι με C# δυστυχως  :-

C και Java ξέρω.
 

Επισκέπτης
Στην καθαρή C (ANSI) είτε την παλιά UNIXoειδή που πρωτάρχισα δεν αντιμετωπίζεις τέτοιο πρόβλημα, καθόσον δε μπαίνουν τέτοια συμπράγκαλα. Τώρα για MFC/Visual C++ δεν ξέρω αν θα συμβαίνει κάτι τέτοιο (διευκρινίζω εισαγωγή μέσω textbox σε γραφικό περιβάλλον κι όχι μέσω MS-DOS prompt) γιατί δεν τις έχω χρησιμοποιήσει (είναι δυσνόητες, προορίζονται για προχωρημένους).
 

Boldemort

Σεβαστός
Εγγρ.
4 Σεπ 2009
Μηνύματα
47.532
Κριτικές
12
Like
36
Πόντοι
1.220
Εχει και η C θέματα με την αναγνωση απο το πληκτρολογιο που πρέπει να προσέξεις. Το πιο απλο που μου έρχεται στο μυαλο ειναι με τις scanf και getchar και το ENTER. Αν πχ έχεις μια τέτοια συνάρτηση για να διαβάσεις εναν χαρακτηρα τοτε θα δώσεις τον χαρακτηρα και μετα θα πατήσεις το ENTER επειδη ομως και το ENTER αντιμετωπιζεται σαν χαρακτηρας στο τερματικο δεν θα αποθηκευτει ποτε ο χαρακτηρας που ηθελες να δώσεις στην μεταβλητη σου παρα το ENTER που πάτησες. Αυτο ειναι μονο ενα παραδειγμα.

 

Επισκέπτης
Οντως ετσι ειναι, αλλα οταν χρησιμοποιουσα ANSI C οι αριθμοι διαβαζονταν με χρηση της scanf ειτε της fscanf. Αμφοτερες δεν υπαρχουν στη C# παρα μοναχα σε ΜFC, Visual C++.

Συνεχιζοντας επι του θεματος εδω υπαρχει μια αλλη χρησιμη συζητηση.
 

Stories

Νέο!

Stories

Top Bottom