Entwickler-Ecke

Basistechnologien - Unlogische Rechnung


GURKE deluxe - Mo 11.10.10 15:35
Titel: Unlogische Rechnung
Hallo,
Ich habe folgenden Code:

C#-Quelltext
1:
2:
3:
//rtbEingabe.TextLength = 17158//

Int32 x = Convert.ToInt32(Math.Round((decimal)(Math.Sqrt(Convert.ToDouble(rtbEingabe.TextLength / 3))), 0, MidpointRounding.AwayFromZero));


Er sagt mir, das das 303 sein sollen. Aber das ist doch vollkommener Murks?!

Wurzel(17158 / 3) = Wurzel(5719.33333) = ~75,6 -> Gerundet: 75

Warum bekommt er jetzt aber 303 raus?

GURKE

PS: Geht das ganze nicht auch ohne es 3 mal umzuformen?

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


traceurmicha - Mo 11.10.10 15:48

Hallo Gurke,

Mir ist nicht ganz klar was du machen willst!?

aber wenn ich ausgeben lasse


C#-Quelltext
1:
2:
double t = Math.Sqrt(17158/3);
MessageBox.Show(t.ToString());

bekomme ich 75,....... raus

und nur nebenbei, wenn du die länge eines Textes haben willst benutze stringvariable.Lenght


GURKE deluxe - Mo 11.10.10 16:16

Das Problem hat sich jetzt gelöst, ich verstehe zwar immernoch nicht was ich falsch gemacht haben soll, aber egal...


djfresh - Di 12.10.10 17:32

Ich bekomme sogar nur 1 raus...

1. mal wandelst du die Text Länge in Double um, wie wärs denn nur mit Text ?!?

2. willst abrunden oder aufrunden ?

weil 75.6... ist 76 gerundet...


C#-Quelltext
1:
x = Convert.ToInt32(Math.Round((decimal)(Math.Sqrt(Convert.ToDouble(Convert.ToDouble(textBox1.Text) / 3))), 0, MidpointRounding.AwayFromZero));                    


so funktioniert dein Code...

P.S. oder so:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
        private double y;
        private double z;
        private decimal f;
        private decimal g;
        private void button1_Click(object sender, EventArgs e)
        {
            y = Convert.ToDouble(textBox1.Text);
            z = Math.Sqrt(y/3);
            f = (decimal)z;
            g = Math.Round(f);
            label1.Text = g.ToString();
        }


GURKE deluxe - Di 12.10.10 18:28

Moin,
Interessant das du 1 raus bekommst :D
Meine Formel sieht jetzt so aus und die funktioniert interessanter Weise:

C#-Quelltext
1:
int xy = Convert.ToInt16(Math.Round(Math.Sqrt(datei.Length), 0, MidpointRounding.AwayFromZero));                    


Gruß
GURKE

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt