VisualBasic VB - Spezielle Rundungsfunktion

Jvooy

Lt. Junior Grade
Dabei seit
Dez. 2011
Beiträge
300
Hallo zusammen,

nach sehr langen probieren(auch googlen) komme ich einfach nicht weiter.

Thema:

Eine Excel-Funktion programmieren, welche automatisch die eingegebene Zahl rundet. Aber nicht normales runden! Sonder:

2. Nachkommastelle_________________________Beispielwerte__________________________gerun.Ergebnis
0, 1, 2_____________decimal number below_____74,20€; 74,21€; 74,22€__________________74,20€
3, 4, 5, 6, 7_________Middle decimal number____74,23€; 74,24€; 74,25€; 74,26€; 74,27€_____74,25€
8, 9_______________decimal number above_____74,28€; 74,29€________________________74,30€


Das Problem besteht darin, dass ich ein JAVA Programmierer bin und mit VB nicht wirklich klar komme. Zudem ist dies Einmalig für mich, daher bitte ich nun hier um Hilfe.

Ich würde mich sehr über Hilfsansätze/ Hilfestellung/ Denkanstöße freuen.

Danke

jvooy
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.038
Ich glaub, du musst den Algorithmus noch mal genauer erklären ;)

Was sollen die "0, 1, 2", "3, 4, 5, 6, 7" und "8, 9" bedeuten?
Soll in der zweiten Zeile der Mittelwert genommen werden oder ist die "5" ganz hinten wichtig?
Soll immer in 5er Schritten gerundet werden?
 

Lawnmower

Fleet Admiral
Dabei seit
Mai 2011
Beiträge
11.658
das ist eine Art kaufmännisches Runden was er meint soweit ich das verstanden habe.
Also dass wenn der Betrag z.B. 74.23 ist dass auf 74.25 aufgerundet wird, bei 74.22 wird abgerundet.

Also mit VB könnte es irgendwie so gehen:
Code:
dblBetrag = 74.22
Formatnumber((Round((dblBetrag/5),2)*5),2)
Für Excel klappt das so (Betrag steht im Feld A1)
Code:
=RUNDEN(A1*20;0)/20
Siehe auch
http://www.csrheintal.ch/pc-tipps/excel-tipps/5er-rundung-in-excel.php
 
Zuletzt bearbeitet:

Karol_

Lieutenant
Dabei seit
Juni 2009
Beiträge
574
Da musst du dir selbst etwas basteln, denn es gibt keine Möglichkeit, das mit VB.net Bordfunktionen zu machen. Der folgende Code ist ein Beispiel, wie so etwas funktionieren könnte:

Code:
        Dim number As Decimal = 3.48
        Dim number2 As Decimal = number - Math.Truncate(number * 10) / 10
        Dim formatted As Decimal

        If number2 <= 0.02 Or number2 >= 0.08 Then
            formatted = Format(Math.Round(number, 1), "0.00")
        Else
            formatted = Math.Round(number / 5, 2) * 5
        End If

        MessageBox.Show(formatted)
Zur Erklärung:

In die Variable number2 wird die zweite Nachkommastelle extrahiert (0,00 bis 0,09). Wenn diese kleiner/gleich als 0,02 ist oder größer/gleich als 0,08 ist, dann runde ganz normal auf 1 Nachkommastelle auf oder ab und formatiere, um die zweite Nachkommastelle (immer eine 0) trotzdem anzuzeigen. Liegt die zweite Nachkommastelle aber zwischen 0,02 und 0,08 dann wird auf die nächste 0,05 gerundet. Dazu verwende ich den Code "Round(number/5,2)*5", der genau so auch in MS Excel und anderswo funktioniert.

Wenn du das nun noch in eine Funktion packst, ist der Code auch beliebig wiederverwendbar.
 

Jvooy

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Dez. 2011
Beiträge
300
Vielen Dank euch!

Ihr habt mir enorm geholfen ;).

Großes Lob!


Grüße

Jvooy
 
Top