Ivy91 Geschrieben 19. Juli 2010 Geschrieben 19. Juli 2010 Hallo zusammen, ich habe die Aufgabe ein Programm zu erstellen, das einen eingeben Wert formatiert wieder ausgibt. Die Funktion soll dabei automatisch den Prefix der Einheit anpassen! Also die Präfixe wären in diesem FAll: f, p, n, µ, m, k, M, G, T" (siehe: de.wikipedia.org/wik...r_Ma%C3%9Feinheiten) Parameter: - Messwert als double - Anzahl signifikanter Stellen (das ist nicht zwangsläufig die Anzahl der Nachkommastellen!) - Einheit - Ein optionales Flag, welches Kennzeichnet, ob die Prefixe "f, p, n, µ, m" verwendet werden dürfen. (manchmal macht es keinen Sinn z.Bsp. aus 0.5 Hz 500 mHz zu machen) Eine Beispiel ausgabe könnte so aussehen: Messwert 2.51236 V signifikanter Stellen 3 Ausgabe 2.51 V Messwert 0.251236 V signifikanter Stellen 3 Ausgabe 251 mV Messwert 2512.36 V signifikanter Stellen 3 Ausgabe 2510 kV Messwert 2512.36 V signifikanter Stellen 5 Ausgabe 2512.4 kV Messwert 2512360 V signifikanter Stellen 3 Ausgabe 2.51 MV Ich hab keine Ahnung wie ich das machen soll, vielleicht kann mir jemand einen guten Denkanstoß geben =) lg ivy Zitieren
_n4p_ Geschrieben 19. Juli 2010 Geschrieben 19. Juli 2010 prüfen ob flag gesetzt, wenn ja prefix bestimmen ergebnis auf signifikante stellen runden string für ausgabe basteln welcher teil genau ist unklar? und hast du schon irgendwelche ideen? Zitieren
Ivy91 Geschrieben 20. Juli 2010 Autor Geschrieben 20. Juli 2010 hey, also ich habe probleme bei der funktion die den optimale größe analysiert (GetValueInOptimal)... hier mal mein bsieheriger quelltext public enum VoltEntity{ //Einheiten festlegen V, mV, kV, µV, fV, pV, nV, MV, GV, TV } public class Volt { private double mValue; //intern immer die anzahl als Volt halten Dictionary<VoltEntity, float> DependencyTable; //Tabelle um die Umrechnungen zu verwalten public Volt() { SetUpDependencyTable(); } public string GetValueInOptimal(bool AddPrefix) { // Das ist die HauptMethode, die den Volt-Eintrag optimal zurückliefert, also in der besten grösse } private VoltEntity FindBestVoltEntity(){ } public double GetVoltAs(VoltEntity entity) {//Gibt die Volt-Value in der gewünschten Einheit zurück if (DependencyTable.ContainsKey(entity)) { return mValue * DependencyTable[entity]; } else { return 0; } } private void SetUpDependencyTable(){ //umrechnungen DependencyTable = new Dictionary<VoltEntity, float>(); DependencyTable.Add(VoltEntity.kV, 1000f); //KiloVolt, d.h. Volt * 1000 = KV DependencyTable.Add(VoltEntity.mV, 0.001f); //mV MiliVolt, d.h. Volt * 0.001 = mV DependencyTable.Add(VoltEntity.µV, 0.000001f); //µV MikroVolt, d.h Volt * 0.000001 = µV DependencyTable.Add(VoltEntity.fV, 0.000000000000001f); //fV, d.h Volt * 0.000000000000001 = fV DependencyTable.Add(VoltEntity.pV, 0.000000000001f); // pV, d.h Volt * 0.000000000001 = pV DependencyTable.Add(VoltEntity.nV, 0.000000001f); // nV, d.h Volt* 0.000000001 = nV DependencyTable.Add(VoltEntity.MV, 1000000f); // MV MegaVolt, d.h Volt * 1000000= MV DependencyTable.Add(VoltEntity.GV, 1000000000f); // GV GigaVolt, d.h Volt * 1000000000 = GV DependencyTable.Add(VoltEntity.TV, 1000000000000f); //TV TeraVolt, d.h Volt * 1000000000000 = TV } //Funktion Signifkikante Stellen berechnen private string Significance(double value, int significance, string unit, bool usePrefix) { string prefix = ""; double devisor = 1; switch((int)(value != 0 ? Math.Log10(value)/3 : 0)) { case -6: prefix = "f"; devisor = 10e-15; break; case -5: prefix = "p"; devisor = 10e-12; break; case -4: prefix = "n"; devisor = 10e-9; break; case -3: prefix = "µ"; devisor = 10e-6; break; case -2: prefix = "m"; devisor = 10e-3; break; case -1: prefix = "k"; devisor = 10e-3; case 3: prefix = "G"; devisor = 10e-9; break; case 4: prefix = "T"; devisor = 10e-12; break; default: prefix = ""; devisor = 1; break; } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.