2016-11-11 1 views
5

Etwas unerwartete Ergebnisse auf meiner Firma verursacht wurde vor langer Zeit, und ich fand dieses Problem:VB6 Round (x, 0) Ausgabe

Dim k As Double 
Dim r As Integer 
k = 182.5 
r = Round(k,0) 

Das Ergebnis r 182 ist, diese Probleme auf meiner Firma verursacht und jetzt ich muss es reparieren.

Die Sache ist, dass ich dies beobachtet:

Dim k As Double 
Dim r As Integer 
k = 186.5 
r = Round(k,0) 

r = 187

Wenn die Einheiten des ganzzahligen Teils des Doppel sind größer als fünf, Runde macht, was ich erwarten würde, aber es doesn 't für Einheiten < = 5.

Wie kann ich dieses Problem lösen? Gibt es eine andere Funktion, um die richtige Rundung zu erhalten?

+0

http://stackoverflow.com/questions/647762/automatic-type-conversion-in-visual-basic-6-0 – MarkJ

+0

In diesem Fall werde ich 'r = int (k + 0,5)' – SBF

Antwort

6

Dies wird Banker Rundung genannt und versucht, die Rundung auf/ab auf 0,5 zu verteilen, basierend darauf, ob die nächste Zahl gerade oder ungerade ist.

Zur Abrundung auf 0,5:

cint(format(182.5, "#0")) ''183 
cint(format(186.5, "#0")) ''187 
+0

One verwenden Beachten Sie jedoch, dass Format $ das Double in einen String konvertiert, aus dem es in ein Int zurückkonvertiert werden muss. Dies ist sehr ineffizient. Format (ohne das $ -Zeichen) ist noch schlimmer, weil es eine Variante erzeugt. – Herb

1

Nun, zunächst einmal ist es nicht so, wie Sie sagen.

k = 182.5 
r = Round(k, 0) 

wird in der Tat 182 produzieren, aber

k = 186.5 
r = Round(k, 0) 

wird 186 produzieren, nicht 187, wie Sie erwähnen. Jetzt

k = 185.5 
r = Round(k, 0) 

wird 186 auch ergeben. Dies wird Banker's Rounding genannt und ist der Standard in VB6. Die Absicht ist, die Tendenz zu beseitigen, immer eine exakte Mitte nach oben zu runden.

Wenn Sie wollen immer rund 0,5 bis,

k = 186.5 
r = Int(k * 2 + 1) \ 2 

verwenden Wenn Sie wollen immer rund 0,5 nach unten, Sie als etwas entlang der Linie von

k = 186.5 
r = Int(k * 2 + 0.99) \ 2 

Fügen Sie so viele 9s verwenden können Nach dem Dezimalzeichen gibt es signifikante Ziffern.