berechnete Werte auf 2 Kommastellen runden

  • Sonstige

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Siggit.

    berechnete Werte auf 2 Kommastellen runden

    Hallo!

    Ich hoffe ich bin hier im richtigen teil des Forums.

    Ich habe folgendes Problem ich versuche gerade mithilfe von 2 Strings einen Wert zu berechnen. Das klappt auch soweit.
    Ich habe beim Ergebnis das Problem, dass ich 4 Kommastellen angezeigt bekomme und wenn das Ergebnis auf eine 0 endet dann wird die 0 nicht mit ausgegeben.
    Hier der Code.

    Visual Basic-Quellcode

    1. Format.NamedSubStrings("Variable_1").Value*Format.NamedSubStrings("Variable_2").Value


    Beispiel:

    Variable_1 = 1,74
    Variable_2 = 2,38
    Ergebnis = 4,1412
    abgerundet auf 2 Kommastellen 4,14

    Ich hoffe ihr könnt mir helfen.

    Danke im vorraus. :)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Math.Round(zahl, Kommastellen)


    Siggit schrieb:

    Ergebnis auf eine 0 endet dann wird die 0 nicht mit ausgegeben.


    Total hirnrissig. Es gibt die Funktion math.round, welcher ich ja meine Anzahl der gewünschten Nachkommastellen mitgebe, die kürzt das Ergebnis aber dennoch weg.

    Entweder versuchst du - wenn du es in Textboxen etc. ausgeben willst - die Textbox zu formatieren, oder du schreibst dir eine Funktion die dir immer schön Nullen anhängt, wenn das Round-Ergebnis nicht genau 2 Nachkommastellen hat.



    edit:

    Hier z.b. eine Funktion die nicht nur die Nachkommastellenanzahl überprüft, sondern auch, ob denn überhaupt etwas übergeben wird etc.. notfalls zu deinen Gunsten verändern.

    VB.NET-Quellcode

    1. Private Function Set2Decimal(sStr As String)
    2. Dim aStr As String()
    3. Dim sRet As String
    4. If Not (sStr Is Nothing Or sStr = "") Then
    5. If sStr.Contains(",") Then
    6. aStr = sStr.Split(",")
    7. If aStr(1).Length = 2 Then
    8. sRet = sStr
    9. ElseIf aStr(1).Length > 2 Then
    10. Return Set2Decimal(Math.Round(Convert.ToDouble(sStr), 2))
    11. Else
    12. sRet = sStr & "0"
    13. End If
    14. Else
    15. sRet = sStr & ",00"
    16. End If
    17. Else
    18. sRet = ""
    19. End If
    20. Return sRet
    21. End Function
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Hallo mrMo!

    Visual Basic-Quellcode

    1. Format.NamedSubStrings("Variable_1").Value*Format.NamedSubStrings("Variable_2").ValueMath.Round(zahl,2)


    Das funktioniert so nicht.
    Variable_1 ist ein erfasster Wert der sch ändert und Variable_2 ist ein Faktor der angepasst wrden kannt. Ich muss ja beim Runden sagen was gerundet werden soll.
    In meinem Fall soll das Produkt auf 2 Kommastellen gerundet werden.

    Hallo Acr0most!

    wie kekomme ich das ganze dann in euine einzeilige Anweisung oder geht das dann einfach so.

    Danke
    Zunächst mal sollte man sich darüber im Klaren werden, ob mit dem "Runden" der Wert, die Darstellung des Werts oder beides gemeint ist.

    Acr0most schrieb:

    Total hirnrissig. Es gibt die Funktion math.round, welcher ich ja meine Anzahl der gewünschten Nachkommastellen mitgebe, die kürzt das Ergebnis aber dennoch weg.

    Du meinst hier z.B. die Darstellung eines Zahlenwertes. Das ist was ganz anderes als das, was Math.Round macht. Math.Round "kürzt" nicht. Das rundet nur und am Ende hast du wieder einen Zahlenwert.
    Wenn du die Zahl mit zwei Nachkommastellen formatiert (<- das ist das Zauberwort) ausgeben willst, benutzt du String.Format(...) oder Double.ToString(...) mit den passenden Formatierungsparametern.

    Hab lange überlegt ob ich hier überhaupt anworten soll. Wenn ich schon wieder sehe, dass mit Strings "gerechnet" wird, dreht sich mir schon wieder alles um.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Arby schrieb:

    Hab lange überlegt ob ich hier überhaupt anworten soll. Wenn ich schon wieder sehe, dass mit Strings "gerechnet" wird, dreht sich mir schon wieder alles um.


    ok, da geb ich Arby recht..

    Wenn du rechnest, Wandle deine Variablen in Double-Werte um..

    dann hast du bspw.:

    Visual Basic-Quellcode

    1. Var1 = Convert.ToDouble("1,74")
    2. Var2 = Convert.ToDouble("2,38")


    dein ergebnis errechnet sich dann wie gewohnt:

    Visual Basic-Quellcode

    1. ​erg = var1 * var2 ' = 4,1412


    das ganze rundest du dann übe Math.Round wie @mrMo geschrieben hat:

    Visual Basic-Quellcode

    1. ​erg = Math.Round(erg, 2) ' = 4,14


    im Groben und ganzen als Ein-Zeiler:

    Visual Basic-Quellcode

    1. ​erg = Math.Round(var1*var2, 2) ' = 4,14


    und die Anzeige musst du dann wie Arby meinte über Formatierung lösen (wenn Erg in den 2 Dezimalen min eine 0 hat).
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    Siggit schrieb:

    Seagull Bartender Automation
    Bevor hier weiterspekuliert wird, bitte unbedingt folgendes klären:

    Welche Programmierumgebung wird da zur Verfügung gestellt?
    VBS? .Net? ein spezielles VBA?

    Die bisherig vorgeschlagenen Lösungen basieren auf .Net

    Wenn es ein VBA ist, das sich an das VBA von Microsoft anlehnt, würde ich die Ausgabe formatieren:

    Visual Basic-Quellcode

    1. AusgabeString = Format(DeineBerechneteZahl, "0.00")

    Und wenn es .Net ist, ebenfalls

    VB.NET-Quellcode

    1. ​AusgabeString = DeineBerechneteZahl.ToString("0.00")
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Siggit schrieb:

    Hallo mrMo!

    Visual Basic-Quellcode

    1. Format.NamedSubStrings("Variable_1").Value*Format.NamedSubStrings("Variable_2").ValueMath.Round(zahl,2)


    Das funktioniert so nicht.
    Variable_1 ist ein erfasster Wert der sch ändert und Variable_2 ist ein Faktor der angepasst wrden kannt. Ich muss ja beim Runden sagen was gerundet werden soll.
    In meinem Fall soll das Produkt auf 2 Kommastellen gerundet werden.


    Wenn du den Code so wie oben ausprobiert hast, wundert es mich nicht das es nicht klappt.

    Wandel mal deine Variablen in Zahlen um. Dann versuch mal sowas:

    Dim dZahl1 As Double = 'Hier kommt dein 1. String mit convertierung hin
    Dim dZahl2 As Double = 'Hier kommt dein 2. String mit convertierung hin

    Dim dErgebnis As Double = Math.Round(dZahl1*dZahl2, 2)

    Lt. Windows wird gerundet, nicht einfach abgeschnitten
    msdn.microsoft.com/de-de/library/zy06z30k(v=vs.110).aspx
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen