2008-11-28 11 views
54

49 9, 73433, 2348 जैसी संख्याएं दी गई वीबीए क्या मैं निकटतम 5 या 10 के लिए गोल करने के लिए उपयोग कर सकता हूं? या एक अपमानजनक संख्या?निकटतम 5 में वीबीए में किसी संख्या को कैसे गोल करें? (या 10 या एक्स)

5 द्वारा:

499 -> 500 
2348 -> 2350 
7343 -> 7345 

10 द्वारा:

499 -> 500 
2348 -> 2350 
7343 -> 7340 

आदि

+0

आप अपने सभी उत्तरों के लिए हर किसी को धन्यवाद। मैं इसके लिए चालाक हूँ। क्षमा करें, मैं केवल एक ही ressponse को सही के रूप में चिह्नित कर सकता हूं, क्योंकि वास्तविक "उत्तर" कई संदेशों में बिखरा हुआ था। –

+0

यह मेरे लिए काम करता है http://www.tek-tips.com/faqs.cfm?fid=5031 – Ferroao

उत्तर

29

एकीकृत उत्तर

X = 1234 'number to round 
N = 5 'rounding factor 
round(X/N)*N 'result is 1235 

चल बिन्दु पूर्णांक, 1234 के लिए।

int(1234.564) 'result is 1235 

सावधान:: वीबी Bankers Rounding का उपयोग करता है, निकटतम सम संख्या, यदि आप के बारे में पता नहीं कर रहे हैं जो आश्चर्य की बात हो सकती है के लिए 564 1235 के लिए, करते हैं (इस वीबी विशिष्ट, अधिकांश अन्य बस काटना भाषाओं है) यह:

msgbox round(1.5) 'result to 2 
msgbox round(2.5) 'yes, result to 2 too 

सभी को धन्यवाद।

83

यह सरल गणित है। एक नंबर एक्स और एक गोलाई कारक एन को देखते हुए, सूत्र होगा:

दौर (एक्स/एन) * एन

10

(VBA विशिष्ट किया जा रहा बिना) निकटतम एक्स के दौर के लिए

एन = एक्स * int (एन/एक्स + 0.5)

जहां int (...) अगले सबसे कम पूर्ण संख्या देता है।

अपने उपलब्ध गोलाई समारोह पहले से ही निकटतम पूर्ण संख्या में दौर तो के 0.5

+0

बस स्पष्ट करने के लिए: 'int (N + 0.5)' 'राउंड (एन)' –

+0

हां जैसा ही है - मैं उसी समय जोड़ रहा था जैसा आपने टिप्पणी की थी :) – Alnitak

+0

+1: इसके लिए धन्यवाद। –

0

कुछ है कि जैसे इसके अलावा छोड़ देते हैं?

'nearest 
n = 5 
'n = 10 

'value 
v = 496 
'v = 499 
'v = 2348 
'v = 7343 

'mod 
m = (v \ n) * n 

'diff between mod and the val 
i = v-m 


if i >= (n/2) then  
     msgbox m+n 
else 
     msgbox m 
end if 
0

बस राउंड (x/5) * 5 नौकरी करना चाहिए।

0

मैं टिप्पणी तो मैं इस

एक vbs में

का उपयोग करेगा नहीं जोड़ सकते हैं कि चलाने के लिए और पता लगाना क्यों 2 आप दौर भरोसा नहीं कर सकते 2

का एक परिणाम दे मजा

msgbox round(1.5) 'result to 2 
msgbox round(2.5) 'yes, result to 2 too 
+0

मैं कहूंगा कि या तो फ्लोटिंग पॉइंट नंबरों को संग्रहीत करने के तरीके के साथ कुछ करने के लिए, या अंतरराष्ट्रीय स्तर पर स्टैंडएटेड राउंडिंग एल्गोरिदम का सही कार्यान्वयन है। मुझे इसका नाम पता नहीं है, लेकिन ऐसा इसलिए था कि हर दूसरे .5 को गोल किया गया, और बाकी। –

+0

राउंडिंग राउंड [एसआईसी] निकटतम संख्या तक भी। एसओ में यहां एक स्पष्टीकरण भी है। –

+0

विल्क्स, आपका सुझाव अच्छा है, लेकिन वीबीए दौर (465/10) * 10 के लिए नहीं होगा 460 – Fredou

1

एक सख्त विज़ुअल बेसिक दृष्टिकोण के लिए, आप फ़्लोटिंग-पॉइंट मान को पूर्णांक में पूर्णांक के लिए एक पूर्णांक में परिवर्तित कर सकते हैं। वीबी दुर्लभ भाषाओं में से एक है जो कि प्रकार के रूपांतरण पर राउंड है (अधिकांश अन्य आसानी से छंटनी करते हैं।)

5 या एक्स के गुणक को पहले विभाजित करके और दौर के बाद गुणा करके किया जा सकता है।

यदि आप गोल करना चाहते हैं और दशमलव स्थान रखना चाहते हैं, तो Math.round (n, d) काम करेगा।

9

वीबी में, गणित के पास दशमलव स्थानों और गोल करने की विधि निर्दिष्ट करने के लिए अतिरिक्त तर्क हैं। Math.Round (10.665, 2, MidpointRounding.AwayFromZero) 10.67 वापस आ जाएगा। यदि संख्या दशमलव या एकल डेटा प्रकार है, तो गणित एक दशमलव डेटा प्रकार देता है। यदि यह दोगुना है, तो यह डबल डेटा प्रकार देता है। अगर विकल्प सख्त हो तो यह महत्वपूर्ण हो सकता है।

परिणाम (10.665)। टॉस्ट्रिंग ("एन 2") "10.67" देने के लिए शून्य से दूर राउंड। अतिरिक्त तर्क के बिना गणित। 10.66 रिटर्न देता है, जो अवांछित विसंगतियों का कारण बन सकता है।

0

इस समारोह का प्रयास करें

-------------- शुरू ----------------

Function Round_Up(ByVal d As Double) As Integer 
    Dim result As Integer 
    result = Math.Round(d) 
    If result >= d Then 
     Round_Up = result 
    Else 
     Round_Up = result + 1 
    End If 
End Function 

------------- अंत ------------

2

'उदाहरण: निकटतम 49 9 के करीब 4 9। आप राउंड() फ़ंक्शन का उपयोग करेंगे। WorksheetFunction.Round (नंबर, दशमलव)

इस तरह बैंकिंग या लेखा पूर्णांकन नहीं है:

a = inputbox("number to be rounded") 
b = inputbox("Round to nearest _______ ") 


    strc = Round(A/B) 
    strd = strc*B 


msgbox(a & ", Rounded to the nearest " & b & ", is" & vbnewline & strd) 
-1

विजुअल बेसिक में इसका उल्टा समारोह Excel में काम करता है की नकल करने के लिए, तुम सिर्फ उपयोग करने के लिए गोल करना

+0

प्रश्न में अनुरोध के अनुसार यह 2348 से 2350 तक नहीं होगा (दूसरा उदाहरण)। – mins

1

यहाँ हमारे समाधान है:

Public Enum RoundingDirection 
    Nearest 
    Up 
    Down 
End Enum 

Public Shared Function GetRoundedNumber(ByVal number As Decimal, ByVal multiplier As Decimal, ByVal direction As RoundingDirection) As Decimal 
    Dim nearestValue As Decimal = (CInt(number/multiplier) * multiplier) 
    Select Case direction 
     Case RoundingDirection.Nearest 
      Return nearestValue 
     Case RoundingDirection.Up 
      If nearestValue >= number Then 
       Return nearestValue 
      Else 
       Return nearestValue + multiplier 
      End If 
     Case RoundingDirection.Down 
      If nearestValue <= number Then 
       Return nearestValue 
      Else 
       Return nearestValue - multiplier 
      End If 
    End Select 
End Function 

उपयोग:

dim decTotal as Decimal = GetRoundedNumber(CDec(499), CDec(0.05), RoundingDirection.Up) 
+0

मुझे लगता है कि यह वीबीएनईटी वीबीए नहीं है? हालांकि तर्क उपयोगी है! – tomRedox

संबंधित मुद्दे