Runden auf nächste 10

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Runden auf nächste 10

    Hallo liebe VB-Gemeinde,

    ich habe ein Problem. Ich möchte gerne ein Offset auf bestimmte Werte in einer Textdatei draufrechnen und dann abspeichern. Der Punkt besteht darin dass die Werte immer auf die nächste ganze Zahl gerundet werden. Ich möchte aber dass er immer auf die nächste 10 Zahl rundet.
    Beispiel:
    ich habe 100.00 in der Datei stehen und will dass er mir da 15% draufrechnet wären ja logischerweise 115, ist ja auch richtig. Ich will aber dass er dann auf 120 rundet und bei 14% dann auf 110.00, bei 26 Prozent auf 130 usw.
    Das ist der Code den ich habe, der auch funktioniert aber eben nur auf die nächste größere bzw. kleinere Ganzzahl.

    VB.NET-Quellcode

    1. txtGrundwert.Text = Replace(txtGrundwert.Text, ".", ",")
    2. Dim percent As Integer = CInt(txtPercent.Text)
    3. Dim grundwert As Integer = CInt(txtGrundwert.Text)
    4. Dim ergebnis As Integer = CInt(grundwert * (percent / 100))
    5. Dim offset As Integer = ergebnis + grundwert
    6. txtErgebnis.Text = CType(offset, String)
    7. Dim betrag As Double = CDbl(txtErgebnis.Text)
    8. txtgerundet.Text = CType(Math.Round(betrag, 0), String)
    9. txtgerundet.Text = String.Format("{0:F2}", betrag)
    10. txtgerundet.Text = Replace(txtgerundet.Text, ",", ".")


    habt ihr ne idee?
    @ErfinderDesRades. geht danke

    VB.NET-Quellcode

    1. txtGrundwert.Text = Replace(txtGrundwert.Text, ".", ",")
    2. Dim percent As Integer = CInt(txtPercent.Text)
    3. Dim grundwert As Integer = CInt(txtGrundwert.Text)
    4. Dim ergebnis As Integer = CInt(grundwert * (percent / 100))
    5. Dim offset As Integer = ergebnis + grundwert
    6. txtErgebnis.Text = CType(offset, String)
    7. Dim betrag As Double = CDbl(txtErgebnis.Text)
    8. txtgerundet.Text = CType(10 * Math.Round(betrag / 10, 0), String)
    9. Dim mitoffset As Double = CDbl(txtgerundet.Text)
    10. txtgerundet.Text = String.Format("{0:F2}", mitoffset)
    11. txtgerundet.Text = Replace(txtgerundet.Text, ",", ".")


    Edit:
    kann man bestimmt wesentlich einfacher schreiben oder?
    ich bin aber ohnehin noch nicht ferig, es soll der Offset immernur auf das was als 2. in jeder Zeile steht angewendet werden und nur wenn diese Zahl nicht Null ist.
    ging mir mehr um das Verständnis. ich werde für dieses Problem, bin mir relativ sicher dass eins entsteht einen anderen Beitrag eröfnen müssen.

    @Gottric Hast Du ein Problem mit dem im Deutschen üblichen Dezimalseparator?
    Dann arbeite doch mit einer amerikanischen Culture, da fällt das beim Hin- und her-konvertieren automatisch ab.
    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!

    Gottric schrieb:

    spart unnötige ressourcen
    Das glaube ich eher nicht, denn Du müsstest eine CultureInfo-Instanz anlegen, gugst Du hier msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx
    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!