Werte immer aufrunden z.B. (0,11 = 0,20), (0,22 = 0,30), (0,35 = 0,40) ?

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Werte immer aufrunden z.B. (0,11 = 0,20), (0,22 = 0,30), (0,35 = 0,40) ?

    Hallo vb-paradise

    leider konnte ich in div. Foren keine Lösung für o.g. Problem finden!
    Nun versuch ich es mal hier

    soweit ist math.round, math.ceiling bekannt allerdings bekomme ich es darüber nicht gelöst und leider ist mir in dieser Richtung auch nichts bekannt wie ich es lösen könnte.

    [Visual Basic 2010]
    Werte immer aufrunden z.B. (0,11 = 0,20), (0,22 = 0,30), (0,35 = 0,40) ?
    ...also die zweite nachkommastelle soll immer aufgerundet werden.

    in der Hoffnung das mir hier jemand helfen kann

    vorab schon mal vielen Dank
    Also so weit ich das einschätzen kann, wird das dann verdammt schwer immer aufzurunden.
    Das bedeutet, dass du deine eigene FUnktion schreiben müsstest da die vorhandenen Funktionen
    wahrscheinlich immer automatisch abrunden bzw. aufrunden werden.
    Wie wärs damit:

    VB.NET-Quellcode

    1. Dim Ausgabe, Eingabe as Single
    2. Ausgabe = CSng(CInt(Ausgabe * 10))'Enhält jetzt die abgerundete Eingabe 0,11>0,1
    3. If Eingabe > Ausgabe Then Eingabe + 0.1 'Rundet die Ausgabe auf, wenn in der Eingabe 0,xy Ziffer y > 0

    Fiel Fergnügen

    Vatter

    Oda:

    VB.NET-Quellcode

    1. Dim Ausgabe, Eingabe as Single
    2. Ausgabe = (Math.Ceiling((Eingabe + 0,09)*10))/10
    Damit wird 0,11 zu 0,2, 0,10 dagegen zu 0,1
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

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

    jo, genau so siehts aus es wird in vb halt auf- bzw. abgerundet :(

    ne funktion? oha^^

    TODESSCHNITZEL -- ja ich suche schon seit 2-3 tage...

    ööhm Vatter: nu wird bei mir aus 1,92 = 2,10 ?(

    ich häng mal mein code hier rein (Achtung kuddelmuddel!!!)

    Private Sub run_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles run.Click
    Dim zahl1 As Double
    Dim zahl2 As Double
    Dim ergeb As Double
    Dim ergeb2 As Double
    Dim t1 As Double
    Dim t2 As Double
    Dim t3 As Double

    t1 = textbox1.Text
    t2 = textbox2.Text

    'zahl1 =
    'zahl2 = t2
    'ergeb = Math.Ceiling((t1 * t2))
    'Dim ergeb2 As Double
    ergeb = t1 * t2
    'Dim Ausgabe, Eingabe As Single
    ergeb2 = (Math.Ceiling((ergeb + 0.09) * 10)) / 10


    textbox3.Text = ergeb2
    @Holgersson
    Bei meiner Funktion wird aus 1.92 -> 2

    Wenn du die Nullen Angezeigt bekommen willst (2 -> 2.0) dann benutze die ToString-Überladung, z.B. so:

    VB.NET-Quellcode

    1. Me.Text = MeinAufrunder(134.32).ToString("0.0")


    BTW: Option Strict ON. Mit "Textbox1.text" kannst du nicht rechnen - was wenn da "08asdg" drin steht?! NummericUpDown ftw - hat übrigens sogar eine vorgebare Anzahl von Dezimalstellen
    Hier mal mit Angabe der Stellen auf die gerundet wird.

    VB.NET-Quellcode

    1. Function roundup(ByVal d As Double, ByVal digits As UInt16) As Double
    2. Dim retval As Double = Math.Round(d, digits, MidpointRounding.AwayFromZero)
    3. If retval < d Then
    4. Dim offset As Double
    5. If digits > 0 Then
    6. offset = (1 / (10 ^ digits))
    7. Else
    8. offset = 1
    9. End If
    10. Return retval + offset
    11. Else
    12. Return retval
    13. End If
    14. End Function
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Einfach??? ?(

    ne ne für mich nicht lange nichts mehr gemacht in VB, früher mehr in QB

    naja ich fummel mich mal dadurch, mal schauen ob ich es hinkriege

    ...bis jetzt klappt es noch nicht

    aber danke schonmal allen beteiligten, echt TOP!

    Holgersson schrieb:

    ööhm Vatter: nu wird bei mir aus 1,92 = 2,10

    Sorry vielmals,
    ich konnts net ausprobieren und hab bei MSDN nachgeschaut und da steht natürlerich:
    Gibt die kleinste Ganzzahl zurück, die größer oder gleich der angegebenen Zahl ist.
    Da du allerdings laut eigenem Bekunden Math.Ceiling kennst, hättest du des auch selber merken können ;)

    So sollte es gehen:

    VB.NET-Quellcode

    1. ergeb2 = (Math.Ceiling(ergeb * 10)) / 10


    Fiele Grütze

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Hi Vatter :) hgw nachträglich ;)

    jo das funktioniert soweit allerdings wenn ich bei der berechnung (zahl1*zahl2) (1,47*3,47) eingebe
    sollte ja 5,10 rauskommen (ergebnis: 5,1009) in VB wird dann aber 5,20 ?(

    hier nochmal mein code:

    Dim zahl1, zahl2, ergeb1, ergeb2 As Double
    zahl1 = TextBox1.Text
    zahl2 = TextBox2.Text
    ergeb1 = zahl1 * zahl2
    ergeb2 = (Math.Ceiling(ergeb1 * 10)) / 10
    TextBox3.Text = Format(ergeb2, "##,##0.00")

    eigentlich schon ganz gut aber 5,10 sollte 5,10 bleiben, halt erst bei 5,11 auf 5,20 runden

    oh man das ist echt komplieziert!?

    ?(
    Schneide halt vorher bis auf 2 Stellen ab.

    VB.NET-Quellcode

    1. ergeb2 = (Math.Ceiling(Math.Ceiling(ergeb1 * 100) / 10)) / 10


    Btw:

    VB.NET-Quellcode

    1. zahl1 = TextBox1.Text


    Sollte man nicht machen.
    Versuche erst via Double.TryParse den String in einen DOuble zu casten.
    Das ist meine Signatur und sie wird wunderbar sein!

    AliveDevil schrieb:


    VB.NET-Quellcode

    1. If ergebnis Mod 0.1 <> 0 Then
    2. ' Runden
    3. End If
    1. wir schreiben VB2010.
    2. in der internen Binärdarstellung sind 0.5, 1.5, 2.5, ... (und negativ) die einzigen Zahlen, die bei Dir nicht gerundet werden müssten.
    Letzten Endes macht doch die Konvertierung zur Ausgabe x.ToString("0.00") den finalen Schritt.
    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!
    @ThuCommix: nein.
    @RodFromGermany: zu 1.: k. Dann eben

    VB.NET-Quellcode

    1. If Not ergebnis Mod 0.1 Then

    zu 2.: falsch. Es werden 0.1, 0.2, 0.3, 0.4, etc. nicht gerundet. Und genau das will der TE, der Rest soll gerundet werden.
    @ThuCommix:
    Nein. Sieh Dir mal den Eröffnungspost genau an.
    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!
    msdn lässt grüßen ...
    msdn.microsoft.com/en-us/library/ms131274.aspx#Y0
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' This example demonstrates the Math.Round() method in conjunction
    2. ' with the MidpointRounding enumeration.
    3. Imports System
    4. Class Sample
    5. Public Shared Sub Main()
    6. Dim result As Decimal = 0D
    7. Dim posValue As Decimal = 3.45D
    8. Dim negValue As Decimal = -3.45D
    9. ' By default, round a positive and a negative value to the nearest even number.
    10. ' The precision of the result is 1 decimal place.
    11. result = Math.Round(posValue, 1)
    12. Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue)
    13. result = Math.Round(negValue, 1)
    14. Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue)
    15. Console.WriteLine()
    16. ' Round a positive value to the nearest even number, then to the nearest number
    17. ' away from zero. The precision of the result is 1 decimal place.
    18. result = Math.Round(posValue, 1, MidpointRounding.ToEven)
    19. Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
    20. result, posValue)
    21. result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
    22. Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
    23. result, posValue)
    24. Console.WriteLine()
    25. ' Round a negative value to the nearest even number, then to the nearest number
    26. ' away from zero. The precision of the result is 1 decimal place.
    27. result = Math.Round(negValue, 1, MidpointRounding.ToEven)
    28. Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
    29. result, negValue)
    30. result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
    31. Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
    32. result, negValue)
    33. Console.WriteLine()
    34. End Sub 'Main
    35. End Class 'Sample

    VB.NET-Quellcode

    1. ' 3.4 = Math.Round( 3.45, 1)
    2. '-3.4 = Math.Round(-3.45, 1)
    3. '
    4. ' 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
    5. ' 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)
    6. '
    7. '-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
    8. '-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)