Auf eine bestimmte Nachkomma stelle runden

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von masterdrummer.

    Auf eine bestimmte Nachkomma stelle runden

    Hey Leute.



    Ich habe ja, wie einige auch wissen, vor kurzem einen 'Umrechner' programmiert. Nun bin ich gerade dabei eine neuauflage zu schreiben und möchte dann auch gleich mal eine Funktion zur Einstellung der Nachkommastellen einfügen.



    Nun habe ich gelesen (Vielen Dank an AliveDevil für die Links), dass man das mit Math.Round() bzw. Decimal.Round() macht. Aber so richtig funktionieren tut das auch nicht.



    Kann mir vielleicht jemand einen Beispielcode mit Erklärung schreiben??



    lg.
    Erstmal war es vorher nicht geplant eine solche Funktion tu integrieren.

    Das der Befehl Math.Round(Zahl, anzahl nachkomma stellen) verwendet werden muss war mir auch klar.

    Also ich habs so gemacht, nur das problem ist, das sobald ich die Value von der numericupdown änder, ändert sich der wert in der txtb_ausgabe immer zu 0.

    VB.NET-Quellcode

    1. Private Sub nachkomma_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nachkomma.ValueChanged
    2. Dim zahl As Double
    3. Dim ausgabe As Double
    4. Select Case nachkomma.Value
    5. Case 0
    6. ausgabe = Math.Round(zahl, 0)
    7. Case 1
    8. ausgabe = Math.Round(zahl, 1)
    9. Case 2
    10. ausgabe = Math.Round(zahl, 2)
    11. Case 3
    12. ausgabe = Math.Round(zahl, 3)
    13. Case 4
    14. ausgabe = Math.Round(zahl, 4)
    15. Case 5
    16. ausgabe = Math.Round(zahl, 5)
    17. Case 6
    18. ausgabe = Math.Round(zahl, 6)
    19. Case 7
    20. ausgabe = Math.Round(zahl, 7)
    21. Case 8
    22. ausgabe = Math.Round(zahl, 8)
    23. Case 9
    24. ausgabe = Math.Round(zahl, 9)
    25. Case 10
    26. ausgabe = Math.Round(zahl, 10)
    27. End Select
    28. txtb_ausgabe.text = ausgabe
    29. End Sub
    Ne, hatte mich hier im Forum vertan (im programm ists ander rum).

    Habs oben geändert. :D
    So, fehler gefunde. In der deklaration stand value und ich dann unten nicht value sondern zahl benutzt.

    Aber nun noch ein Problem:

    Wenn ich dann bei einer zahl erst auf 1 stelle und dann auf 3 stellen runden möchte geht es nicht.

    Wenn ich also in der numericupdown box 1 einstelle, rundet er es mir auf eine nachkomma stelle. wenn ich dann aber auf 2 gehe, ändert sich ncihts. Und wenn ich von 1 auf 0 gehe, funktioniert es. Wenn ich dann aber wieder auf 1 gehe, geht es nicht :(


    Edit by Manschula: Es gibt eine Bearbeiten-Funktion; diese bitte auch verwenden! --> Beiträge zusammengeführt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manschula“ ()

    @Manawyrm: Integer-Werte werden, wenn sie mit Nachkommastellen ausgegeben werden sollen, automatisch in Double konvertiert, auch wenn da nur Nullen stehen.
    @masterdrummer: Warum machst Du so einen Ruß?

    VB.NET-Quellcode

    1. Private Sub nachkomma_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nachkomma.ValueChanged
    2. Dim zahl As Double = 123.456 ' oder Du generierst eine Zufallszahl
    3. Dim ausgabe As Double
    4. ausgabe = Math.Round(zahl, nachkomma.Value)
    5. txtb_ausgabe.text = ausgabe
    6. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Risenmagasuperhyper lange Fehlermeldung:

    Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "Round" ohne einschränkende Konvertierung aufgerufen werden kann:
    'Public Shared Function Round(d As Decimal, mode As System.MidpointRounding) As Decimal': Der mit dem Argument übereinstimmende Parameter "d" wird von "Double" auf "Decimal" reduziert.
    'Public Shared Function Round(d As Decimal, mode As System.MidpointRounding) As Decimal': Der mit dem Argument übereinstimmende Parameter "mode" wird von "Decimal" auf "System.MidpointRounding" reduziert.
    'Public Shared Function Round(d As Decimal, decimals As Integer) As Decimal': Der mit dem Argument übereinstimmende Parameter "d" wird von "Double" auf "Decimal" reduziert.
    'Public Shared Function Round(d As Decimal, decimals As Integer) As Decimal': Der mit dem Argument übereinstimmende Parameter "decimals" wird von "Decimal" auf "Integer" reduziert.
    'Public Shared Function Round(value As Double, mode As System.MidpointRounding) As Double': Der mit dem Argument übereinstimmende Parameter "mode" wird von "Decimal" auf "System.MidpointRounding" reduziert.
    'Public Shared Function Round(value As Double, digits As Integer) As Double': Der mit dem Argument übereinstimmende Parameter "digits" wird von "Decimal" auf "Integer" reduziert. E:\Visual Basic\Rechner\Rechner\Umrechner.vb 284 19 Rechner
    Habe was geändert, und es funktioniert auch fast. Nur das ich jetzt die Fehlermeldung bekomme:

    "Value" ist kein Member von "Integer"

    VB.NET-Quellcode

    1. Private Sub nachkommastelle_kürzen()
    2. Dim zahl As Integer = txtb_ausgabe.Text
    3. Dim ausgabe As Integer
    4. Dim nachkomma As Integer = nachkomma.Value
    5. ausgabe = Math.Round(zahl, nachkomma)
    6. txtb_ausgabe.Text = ausgabe
    7. End Sub


    lg.
    @MySide: Du hast das Problem nicht verstanden.
    @masterdrummer: Da hättest Du aber auch selbst drauf kommen können:
    nachkomma.Value ist vom Typ Decimal. Musst Du halt nach Integer konvertieren:

    VB.NET-Quellcode

    1. Dim i As Integer = CInt(nachkomma.Value)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke, funktionier trotzdem nichts. Hab gerade das ausprobiert:

    VB.NET-Quellcode

    1. Dim nachkomma as Integer = nachkomma.Value


    Fehlermeldung: Value ist kein Member von Integer

    VB.NET-Quellcode

    1. Dim nachkomma As Integer = CInt(nachkomma.Value)


    Fehlermeldung: Value ist kein Member von Integer

    VB.NET-Quellcode

    1. Dim nachkomma As Decimal = nachkomma.Value


    Fehlermeldung: Value ist kein Member von Decimal

    VB.NET-Quellcode

    1. Dim nachkomma As Double = nachkomma.Value


    Fehlermeldung: Value ist kein Member von Double


    Edit: Fehler gefunden. Hatte Option Strict Off :D xd
    Es ist von Vorteil, wenn man lesen kann.

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. Dim i As Integer = CInt(nachkomma.Value)

    Du hast da geschrieben:
    Dim XYZ As bla = XYZ.Value :D :D :D
    Bilder
    • Nachkomma.jpg

      16,8 kB, 935×108, 267 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Es ist von Vorteil, wenn man lesen kann.

    masterdrummer schrieb:

    Dim nachkomma As Double = nachkomma.Value

    VB.NET-Quellcode

    1. Dim DEINE_VARIABLE As Double = CDbl(nachkomma.Value)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja is ja ok.....

    Edit: Zu früh gefreut:

    VB.NET-Quellcode

    1. Dim nachkomma As Integer = CInt(nachkomma.Value)


    Fehlermeldung: Value ist kein Member von Integer

    VB.NET-Quellcode

    1. Dim nachkomma As Double = CDbl(nachkomma.Value)


    Fehlermeldung: Value ist kein Member von Double

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „masterdrummer“ ()