2009-08-04 15 views
7

abgerundet Ich habe eine Visual Basic-Anwendung, die eine Zahl abrunden muss, zum Beispiel 2.556 würde 2.55 werden und nicht 2.26.Eine Zahl in Visual Basic

Ich kann dies tun, um eine Funktion mit den Zeichen mehr als 2 rechts vom Komma abzustreifen dies mit:

Dim TheString As String 
TheString = 2.556 
Dim thelength = Len(TheString) 
Dim thedecimal = InStr(TheString, ".", CompareMethod.Text) 
Dim Characters = thelength - (thelength - thedecimal - 2) 
_2DPRoundedDown = Left(TheString, Characters) 

Gibt es eine bessere Funktion, dies zu tun?

Antwort

10

Sie können dies mit Math.Floor tun. Allerdings müssen Sie * 100 und teilen sich vermehren, da Sie nicht eine Reihe von Ziffern

Dim theNumber as Double 
theNumber = 2.556 
Dim theRounded = Math.Sign(theNumber) * Math.Floor(Math.Abs(theNumber) * 100)/100.0 
+0

Das wird nicht funktionieren, wenn die Zahl negativ ist. – Justin

+0

Manchmal ist es vorteilhaft, Ihre Zahlen als Integer oder Fixpunkt zu speichern (wenn Sie nicht den gesamten Fließkommazahlenbereich benötigen), Berechnungen an den Fixpunktzahlen durchzuführen und diese dann beim Anzeigen für den Benutzer anzupassen. –

+0

@Justin: Guter Punkt - ich bearbeitet, um negative Zahlen zu berücksichtigen, sowie positiv –

3

Eine andere Möglichkeit, es zu tun, beruht nicht auf mit der String-Typ liefern können:

Dim numberToRound As Decimal 
Dim truncatedResult As Decimal 
numberToRound = 2.556 
truncatedResult = (Fix(numberToRound*100))/100 
+0

Die Verwendung von Fix() ist etwas schneller als die Verwendung von Floor(). – Justin

+2

Haben Sie etwas, das diese Aussage unterstützt? –

+1

@Justin: Fix ist eigentlich langsamer als Math.Floor - es macht einen Check, dann ruft Math.Floor intern auf. Führen Sie Reflektor für Microsoft.VisualBasic.dll für Details aus. –

2

Die Math.Floor() Antwort ist gut. Ich weiß nicht genau, in welchen VB-Umgebungen Fix() definiert ist. Justin weist darauf hin, dass Math.Floor() nicht mit negativen Zahlen arbeitet. Sie müssten den absoluten Wert nehmen und dann mit dem SGN() der Zahl multiplizieren. Ich kenne den genauen Namen der Funktion nicht, die Sie verwenden würden, um die SiGN (nicht sin()) der Nummer zu erhalten.

In Pseudo-Code, negative Werte zu berücksichtigen, sieht das Ergebnis würden:

result = sgn(num) * floor(abs(num * RoundToDig))/RoundToDig 

- Furry moo Kühe und dekomprimiert.

+0

Ich bin gewohnt, die Fix() -Funktion von VB6, aber es ist auch in VB.NET - http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.conversion.fix.aspx –

+0

@WyrdestGeek: Die Funktion ist Math.Sign. @Saul: Fix ruft intern Math.Floor auf. –

+0

Was ist das Geschäft über die Dekompression von Rindern? –

1

abrunden

Math.Floor(number) 

Zeichen trimmen

number.Substring(0,1) 

Sie können es in String konvertieren.

0
Dim Input As Decimal 
Dim Output As Decimal 
Input = 2.556 
Output = Input - (Input Mod 0.01) 

Dies wird sowohl mit positiven und negativen Zahlen arbeitet