Zum Inhalt springen

[C#] Formatieren eines Messwertes


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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?

Geschrieben

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;

}

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...