Math.Round() funktioniert nicht richtig

  • VB.NET
  • .NET (FX) 4.0

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

    Math.Round() funktioniert nicht richtig

    Habe mal wieder ein Problem,

    Ich versuche derzeit das man in einem Funktionsgraphen rumscrollen kann, nur hab ich das Problem, dass Ich die X/Y Schrittweite beim Mausscrollen verändere und dabei um 1/10 des jetzigen Wertes verändere und den Wert mit Math.Round(XSchrittweite / 10,2) auf 2 Nachkommastellen runde.
    Doch gelegentlich kommt es dazu dass eine Zahl wie

    9,0000000000001 auftaucht und die geht dann auch nicht mehr weg.

    Woran könnte das liegen?

    Hier die Stelle:

    VB.NET-Quellcode

    1. If e.Delta > 0 Then
    2. 'Rangevalues sind die Abstände zwischen den Punkten an den Achsen und auch die Anzahl (heisst je größer der Wert desto größer die Abstände und desto weniger Punkte (Zoomen halt))
    3. XRangeValue += 1
    4. YRangeValue += 1
    5. 'Diese beiden geben die Schrittanzahl an, also den Abstand pro Punkt an den Achsen (x für x achse, y für y achse) und hier hab ich das Problem mit der 9,0000000001 Zahl obwohl die Zahl nach 2 nachkommastellen gerundet wird..
    6. _xLineStep -= Math.Round(_xLineStep / 10, 2)
    7. _yLineStep -= Math.Round(_yLineStep / 10, 2)
    8. ElseIf e.Delta < 0 Then
    9. 'Selbiges oben nur andersrum
    10. XRangeValue -= 1
    11. YRangeValue -= 1
    12. _xLineStep += Math.Round(_xLineStep / 10, 2)
    13. _yLineStep += Math.Round(_yLineStep / 10, 2)
    14. Else
    15. Return
    16. End If
    17. Me.Invalidate()



    Die beiden _xLinestep und _yLineStep sind übrigens zu Beginn ganze Zahlen (wo ichs getestet hab)

    Ich lade mal ein Bild zur Verdeutlichung hoch, wies am Anfang aussieht und dannach beim scrollen:

    Am anfang:



    Nach etwas scrollen:



    (Man achte auf -84,8800000000001)

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

    @ErfinderDesRades
    Ah ok danke, habs jetzt so umgeändert (klappt auch):

    VB.NET-Quellcode

    1. If e.Delta > 0 Then
    2. 'Rangevalues sind die Abstände zwischen den Punkten an den Achsen und auch die Anzahl (heisst je größer der Wert desto größer die Abstände und desto weniger Punkte (Zoomen halt))
    3. XRangeValue += 1
    4. YRangeValue += 1
    5. 'Diese beiden geben die Schrittanzahl an, also den Abstand pro Punkt an den Achsen (x für x achse, y für y achse) und hier hab ich das Problem mit der 9,0000000001 Zahl obwohl die Zahl nach 2 nachkommastellen gerundet wird..
    6. _xLineStep -= _xLineStep / 10
    7. _yLineStep -= _yLineStep / 10
    8. _xLineStep = Math.Round(_xLineStep, 2)
    9. _yLineStep = Math.Round(_yLineStep, 2)
    10. ElseIf e.Delta < 0 Then
    11. 'Selbiges oben nur andersrum
    12. XRangeValue -= 1
    13. YRangeValue -= 1
    14. _xLineStep += _xLineStep / 10
    15. _yLineStep += _yLineStep / 10
    16. _xLineStep = Math.Round(_xLineStep, 2)
    17. _yLineStep = Math.Round(_yLineStep, 2)
    18. Else
    19. Return
    20. End If
    21. Me.Invalidate()