2010-12-04 10 views
0

Ich habe hier ein bisschen eine mathematische Frage zu haben.Mache ich etwas falsch mit meinen Bestellungen von Operationen?

Im Wesentlichen möchte ich zwei Gruppenfelder haben, die ein ganzes Formular ausfüllen. Wenn dieses Formular geladen wird, möchte ich zwei verschiedene Zahlen verwenden und sie in einen Prozentsatz der Höhe des Formulars umwandeln und die Höhen der Gruppenfelder entsprechend anpassen. Ich dies allerdings hätte gearbeitet:

Debug.WriteLine(((((programdirs.Length * 100)/totaldirs) * 100)/this.Height) * 100); 

Es ist jedoch immer endet Druck 0. Ist es möglich, dass es die Dezimalstellen abzurunden ist, da ich Operationen mit Integer-ähnlichen Zahlen durchführen? Was kann ich tun, damit der Compiler die Berechnungen in einer Fließkommazahl behält, bis ich sie am Ende abrunden will?

Antwort

1

Nevermind, antwortete ich meine eigene Frage: P

ich auf dem richtigen Weg war, als ich dachte, dass für meine Berechnungen integer ähnlichen Nummern verursachen würde es die Dezimalstellen abzuschneiden. Das Eingeben einer beliebigen statischen Zahl, wie 100 für mich, führte dazu, dass das Ergebnis immer eine Ganzzahl war, unabhängig davon, was sein konnte. Also, am Ende, das ist, was ich getan habe, um mein Problem zu beheben:

  Debug.WriteLine(((((programdirs.Length * (float)100)/totaldirs) * (float)100)/this.Height) * (float)100); 

Jetzt alles, was ich tun muss, ist es zu runden.

0

Eine weitere Option könnte sein, die Reihenfolge der Operationen zu ändern, die so lange funktionieren soll, wie Sie vorsichtig sind Überlauf zu vermeiden:

Debug.WriteLine(programdirs.Length * 100 * 100 * 100/totaldirs/this.Height); 

Sie entweder Division bewegen können und einen oder mehr 100 Werte kombinieren (dh ersetzen 100 * 100 mit 10000).

+0

Das macht die Dinge viel einfacher aussehen, danke :) Ich habe tatsächlich beschlossen, die Schnittstelle zu ändern. – TGP1994

Verwandte Themen