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;

}

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...