2016-11-11 13 views
5

कुछ मेरी कंपनी पर अप्रत्याशित परिणाम बहुत पहले पैदा कर रहा था, और मैं इस समस्या दिखाई दी:VB6 दौर (x, 0) मुद्दा

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

आर का परिणाम 182 है, यह मेरी कंपनी पर समस्याओं के कारण और अब मुझे इसे ठीक करना है।

बात यह है कि मैं इस मनाया है:

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

आर = 187

जब डबल का पूर्णांक भाग के एकताए पाँच से भी बड़ा कर रहे हैं, दौर मैं क्या उम्मीद करता है, लेकिन ऐसा नहीं एकता के लिए नहीं < = 5।

मैं इस समस्या को कैसे हल कर सकता हूं? क्या राउंड राउंडिंग पाने के लिए कोई और काम है?

+0

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

+0

इस मामले में मैं 'r = int (k + 0.5)' – SBF

उत्तर

6

इसे बैंकर पर राउंडिंग कहा जाता है और निकटतम संख्या विषम या यहां तक ​​कि इस पर आधारित है कि 5 पर राउंडिंग अप/डाउन वितरित करने का प्रयास किया जाता है। पहले बंद

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

वन का उपयोग करूंगा ध्यान दें, हालांकि, प्रारूप $ डबल को स्ट्रिंग में परिवर्तित करता है, जिससे इसे वापस एक इंट में परिवर्तित करना होता है। यह बहुत अक्षम है। प्रारूप ($ चिह्न के बिना) भी बदतर है, क्योंकि यह एक संस्करण बनाता है। – Herb

1

ठीक है, है, यह ऐसा नहीं है जैसा कि आप कहते हैं:

.5 पर दौर के लिए।

k = 182.5 
r = Round(k, 0) 

वास्तव में 182 का उत्पादन होगा, लेकिन

k = 186.5 
r = Round(k, 0) 

186, नहीं 187 का उत्पादन के रूप में आप का उल्लेख होगा। अब,

k = 185.5 
r = Round(k, 0) 

186 भी मिलेगा। इसे Banker's Rounding कहा जाता है और यह वीबी 6 में मानक है। इसका इरादा हमेशा सटीक मध्यरात्रि के दौर की पूर्वाग्रह को पूर्ववत करना है।

आप हमेशा दौर 0.5 अप,

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

उपयोग करने के लिए आप हमेशा दौर 0.5 नीचे, आप कुछ

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

की रेखा के साथ उपयोग कर सकते हैं के रूप में कई 9 नंबर के पत्तों के रूप में चाहते हैं चाहते हैं दशमलव बिंदु के बाद महत्वपूर्ण अंक हैं।