Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Συζητήσεις για τις γλώσσες του dot Net και για του Visual Studio της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Mpouloukos
Δημοσιεύσεις: 9
Εγγραφή: 12 Ιούλ 2009 03:20

Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Δημοσίευση από Mpouloukos » 17 Δεκ 2013 17:42

Καλησπέρα παιδιά.Φτιάχνω στο Visual Studio 2013 ένα Calculator σε C Sharp και θέλω τα φώτα σας αν είναι εφικτό.
Όταν κάνω οποιαδήποτε πράξη ΧΩΡΙΣ δεκαδικό την κάνει φυσιολογικά. Αν προσπαθήσω να κάνω πράξη του τύπου 3,5 + 3,5 μου βγάζει σαν αποτέλεσμα 70,ενώ αν για παράδειγμα κάνω διαίρεση του τύπου 9 / 6 βγάζει αποτέλεσμα 1,5 ΜΕ την υποδιαστολή στην θέση της.Σαν κώδικα,έχω βάλει να κάνει Convert.ToDecimal όλους τους αριθμούς την ώρα που πατας το = για να κάνει την πράξη αλλά παρόλα αυτά,δεν έχω αποτέλεσμα...
Αν χρειάζεται,μπορώ να σας παραθέσω όλο τον κώδικα που έχω γράψει,καθώς κ ένα screenshot του πως είναι το calculator μου.

Κάθε βοήθεια ευπρόσδεκτη,κ αν χρειάζεστε περαιτέρω πληροφορίες,απλά πείτε μου.

Άβαταρ μέλους
xultimatex
Honorary Member
Δημοσιεύσεις: 2505
Εγγραφή: 26 Ιούλ 2003 13:02
Τοποθεσία: Ξάνθη
Επικοινωνία:

Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Δημοσίευση από xultimatex » 17 Δεκ 2013 17:55

Καλύτερα να δώσεις και τον κώδικα γιατί, τουλαχιστον εγώ, δε μπορώ να καταλάβω έτσι τί μπορεί να συμβαίνει...
:arrow: Αν προσπαθείς πολύ για να πετύχεις κάτι, ίσως το κάνεις με λάθος τρόπο...

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Δημοσίευση από dva_dev » 17 Δεκ 2013 19:02

Mpouloukos έγραψε:Αν προσπαθήσω να κάνω πράξη του τύπου 3,5 + 3,5 μου βγάζει σαν αποτέλεσμα 70,ενώ αν για παράδειγμα κάνω διαίρεση του τύπου 9 / 6 βγάζει αποτέλεσμα 1,5 ΜΕ την υποδιαστολή στην θέση της.
Για δοκίμασε να κάνεις 3.5 + 3.5 τι βγάζει.

Άβαταρ μέλους
Mpouloukos
Δημοσιεύσεις: 9
Εγγραφή: 12 Ιούλ 2009 03:20

Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Δημοσίευση από Mpouloukos » 20 Δεκ 2013 14:51

Λοιπόν,το πρόβλημα το βρήκα και είναι τόσο αστείο που θα κλάψω....
Θα σας παραθέσω τον κώδικα και θα σας πω που έκανα το λάθος.

Κώδικας: Επιλογή όλων

f (textBox1.Text.Contains(",")) 
            {
                return;
            }
            else
            {
                textBox1.Text = textBox1.Text + ","; 
            }
        }
Αντί για το κόμμα,είχα βάλει τελεία,αυτή που έχει πάνω στο NumPad.Η λογική μου είπε ότι εάν έβαζα την υποδιαστολή από το NumPad όλα θα ήταν καλά,αλλά το visual studio αποφάσισε ότι είναι μία απλή τελεία και όχι υποδιαστολή και ας έβαλα στην πρόσθεση τον εξής κώδικα

Κώδικας: Επιλογή όλων


if (plus)
            {
                decimal deci = Convert.ToDecimal(textBox1.Tag) + Convert.ToDecimal(textBox1.Text); 
            }
τώρα ότι και να πω.....είναι ακατάλληλο για το forum.Ευχαριστώ πάντως που ενδιαφερθήκατε και μου απαντήσατε,το εκτιμώ ιδιαίτερα
:D :D

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Δημοσίευση από dva_dev » 20 Δεκ 2013 15:09

Ίσως είναι καλύτερα να κάνεις convert σε decimal ορίζοντας συγκεκριμένο culture. Π.χ.

Κώδικας: Επιλογή όλων

static void Main( string[] args )
{
    decimal dec;
    string str = "1.234,56";
    decimal.TryParse(str, NumberStyles.Number, CultureInfo.GetCultureInfo("el-GR"), out dec); //OK (1234.56)
    decimal.TryParse(str, NumberStyles.Number, CultureInfo.GetCultureInfo("en-US"), out dec); //FAIL
    str = "1,234.56";
    decimal.TryParse(str, NumberStyles.Number, CultureInfo.GetCultureInfo("el-GR"), out dec); //FAIL
    decimal.TryParse(str, NumberStyles.Number, CultureInfo.GetCultureInfo("en-US"), out dec); //OK (1234.56)
}

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Δημοσίευση από cpulse » 20 Δεκ 2013 23:14

Γενικά πάντως η C# δεν το χει με τα casts. Όταν κάνεις πράξεις ανάμικτα integers και floats παίρνεις ό,τι να ναι αποτελέσματα. Πρέπει πρώτα να τα κάνεις όλα cast σε float χειροκίνητα.

Άβαταρ μέλους
Mpouloukos
Δημοσιεύσεις: 9
Εγγραφή: 12 Ιούλ 2009 03:20

Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Δημοσίευση από Mpouloukos » 23 Δεκ 2013 14:24

Δηλαδή πιστεύετε οτι με το να τα κάνω bool,θα υπάρχει θέμα?
Αυτή τη στιγμή για να μπορώ να κάνω τις πράξεις μου,έχω χρησιμοποιήσει τον εξής τρόπο:

Κώδικας: Επιλογή όλων

        bool plus = false;
        bool minus = false;
        bool multiply = false;
        bool divide = false;
        bool equal = false;
Έτσι,όταν πατάω το ίσον, το equal αλλάζει σε true και ξεκινάνε οι πράξεις.
Τώρα απλά,με την αλλαγή του κόμματος,όταν κάνω 3,5+3,5 μου βγάζει σαν αποτέλεσμα 7,0 οπότε το πρόβλημα λύθηκε.

Τώρα ένα άλλο θεματάκι που έχω.Θέλω να προσθέσω τις εξής λειτουργείες
  • Λογαριθμο
    υψωση σε δύναμη
    Τετραγωνικη ρίζα
αλλά δεν ξέρω πως να γράψω κώδικα για αυτά.Δοκίμασα με το Power και με το σύμβολο ^ γράφωντας τον εξής κώδικα

Κώδικας: Επιλογή όλων

bool power = false;


if (power)
            {
                float dec = (textBox1.Tag) ^ (textBox1.Text);
                textBox1.Text = dec.ToString();
            }
αλλά μου βγάζει ένα error που λέει "Operator '^' cannot be applied to operands of type 'object' and 'string' "

Έχω αρχίσει να πιστεύω ότι πρέπει να σας εναποθέσω όλον τον κώδικα για να μου πείτε που έχω κάνει μαλακία....

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Κάνοντας δεκαδικές πράξεις στη C Sharp στο visual studio 2013

Δημοσίευση από cpulse » 23 Δεκ 2013 16:36

Λογικό δεν είναι; Άμα είναι string πως θα κάνει μαθηματικές πράξεις. Δες τι έγραψε λίγο πιο πάνω ο dva_dev για να μετατρέψεις το string σε decimal.

Απάντηση

Επιστροφή στο “dot Net και Visual Studio”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες