Zahlen runden

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von 4typen.

    Zahlen runden

    Hallo,

    ich würde gerne eine Zahl runden. Hab es mit verschiedenen Sachen probiert, unter anderem "Format", aber irgendwie funktioniert es nicht bei mir.

    Gibt es da eine Möglichkeit? Man müsste auch auf eine bestimmte Stelle runden können.


    Danke schonmal,

    kevin89
    Versuchs mal hiermit

    VB.NET-Quellcode

    1. Public Function RoundCorrect(ByVal value As Double, ByVal decimals As Integer) As Double
    2. ' zunächst das Vorzeichen merken
    3. Dim sign As Integer = Math.Sign(value)
    4. ' Wert absolut (ohne Vorzeichen)
    5. value = Math.Abs(value)
    6. ' Wert um Faktor 10^decimals multiplzieren
    7. ' und 0.5 hinzuaddieren
    8. value *= Math.Pow(10, decimals)
    9. value += 0.5
    10. ' nur den Ganzzahlenwert berücksichtigen und
    11. ' entsprechend der Anzahl Nachkommastellen
    12. ' durch 10^decimals teilen
    13. value = Math.Floor(value) / Math.Pow(10, decimals)
    14. ' Vorzeichen berücksichtigen
    15. Return sign * value
    16. End Function
    Ne funzt leider net X(

    Hab ne Dll mit der Shared Function als Verweis hinzugefügt und zb folgenden Code:

    Quellcode

    1. MsgBox(ClassLibrary1.Class1.RoundNumber("1.8122351", 3))



    Dann kommt da 18122351 raus, und andere komische Sachen ?(

    EDIT: Problem gelöst, manchmal will er einen "." und manchmal ein ","; indem Fall war es ein Komma, jetzt geht es.

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

    gibt es nicht zur einfachheit noch die

    VB.NET-Quellcode

    1. Math.Round
    2. bzw
    3. Decimal.Round


    funktion?
    soweit ich weis, erwartet diese drei parameter, einmal den wert selbst, dann die anzahl an nachkommastellen, und ob auf oder abgerundet wrden soll
    @powerprogger
    Hab das jetzt auch mal probiert, kann man das auch einstellen, dass wenn die Dezimalstelle 0 ist auch angezeigt wird. also 34,0 undstatt dem komma ein Punkt ist 34.0

    VB.NET-Quellcode

    1. Dim xzahl, yzahl As Decimal
    2. xzahl = e.Location.X / 6
    3. yzahl = e.Location.Y / 4.5
    4. xzahl *= Math.Pow(10, 1)
    5. xzahl += 0.5
    6. yzahl *= Math.Pow(10, 1)
    7. yzahl += 0.5
    8. xzahl = Math.Floor(xzahl) / Math.Pow(10, 1)
    9. yzahl = Math.Floor(yzahl) / Math.Pow(10, 1)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „rom-sharker“ ()

    deine rechnung hat einen kleinen logischen fehler:

    du machst aus eine rationalen Zahl eine ganze Zahl indem du die Nachkommstellen streichst.
    Anschließend teilst du die zahl durch 10

    d.h.
    0.234 => 0
    0/10 => 0.0
    bzw.
    1.234 => 1
    1/10 => 0.1



    wenn dann müsstest du nocheinmal floor machen

    VB.NET-Quellcode

    1. xzahl = Math.Floor(xzahl / 10)
    2. xzahl = Math.Floor( Math.Floor(xzahl) / 10)
    3. xzahl = Math.Floor( Math.Floor(xzahl) / Math.Pow(10,1))


    kommt darauf an was du mit dem floor erreichen willst da man genauigkeit einbüßt
    Also so wie ich es habe, ist es schon in ordnung es wird auf eine Kommastelle ausgegeben nur bei der null nicht.
    Beispiel: Ausgabe = 49,7 49,8 49,9 50 50,1 50,2
    Müsste so sein = 49,7 49,8 49,9 50,0 50,1 50,2
    dann in ne msgbox ausgeben msgbox("Wert" & xzahl)
    so hier mal der ganze code:

    VB.NET-Quellcode

    1.   Private Sub zonenkarte_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseMove
    2.   Dim xzahl, yzahl As Integer
    3.   xzahl = e.Location.X / 6
    4.   xzahl *= Math.Pow(10, 1)
    5.   xzahl += 0.5
    6.   xzahl = Math.Floor(xzahl) / Math.Pow(10, 1)
    7.   yzahl = e.Location.Y / 4.5
    8.   yzahl *= Math.Pow(10, 1)
    9.   yzahl += 0.5
    10.   yzahl = Math.Floor(yzahl) / Math.Pow(10, 1)
    11.   If xzahl < 10 Then
    12.   If yzahl < 10 Then
    13.   lbl_koord.Text = " " & xzahl & "," & " " & yzahl
    14.   ElseIf yzahl < 100 Then
    15.   lbl_koord.Text = " " & xzahl & "," & "" & yzahl
    16.   Else
    17.   lbl_koord.Text = " " & xzahl & "," & yzahl
    18.   End If
    19.   ElseIf xzahl < 100 Then
    20.   If yzahl < 10 Then
    21.   lbl_koord.Text = " " & xzahl & "," & " " & yzahl
    22.   ElseIf yzahl < 100 Then
    23.   lbl_koord.Text = " " & xzahl & "," & " " & yzahl
    24.   Else
    25.   lbl_koord.Text = " " & xzahl & "," & yzahl
    26.   End If
    27.   Else
    28.   If yzahl < 10 Then
    29.   lbl_koord.Text = xzahl & "," & " " & yzahl
    30.   ElseIf yzahl < 100 Then
    31.   lbl_koord.Text = xzahl & "," & " " & yzahl
    32.   Else
    33.   lbl_koord.Text = xzahl & "," & yzahl
    34.   End If
    35.   End If
    36.   End Sub

    Also wie man sieht sollen die Koordinate auf 1 Nachkommastelle ausgegeben werden auch wenn die nachkommastelle eine 0 ist. @4typen mit deinem Beispiel ist mir nicht geholfen. Da es ja das grundlegende Problem nicht löst: NULL auch anzeigen
    MfG