2012-07-05 9 views
8

मुझे टेक्स्टबॉक्स में डिस्प्ले के लिए मेरे डबल वैल्यू के दशमलव स्थानों की मात्रा को कम करने की आवश्यकता है। वीबीए के साथ इसे कैसे प्राप्त किया जाएगा?एक्सेल में वीबीए के साथ डबल ट्रंकिंग

उत्तर

7

आप VBA

में FORMAT के लिए ROUND उपयोग कर सकते हैं उदाहरण के लिए 2 दशमलव स्थानों

Dval = 1.56789 

Debug.Print Round(dVal,2) 

Debug.Print Format(dVal,"0.00") 

नोट को दिखाने के लिए: ऊपर आप 1.57 दे देंगे। तो अगर आप देख रहे हैं 1.56 के लिए तो आप एक स्ट्रिंग में Dval स्टोर कर सकते हैं और फिर इस

Dim strVal As String 

dVal = 1.56789 
strVal = dVal 

If InStr(1, strVal, ".") Then 
    Debug.Print Split(strVal, ".")(0) & "." & Left(Split(strVal, ".")(1), 2) 
Else 
    Debug.Print dVal 
End If 
6

आप दौर मूल्य के लिए, तो तुम दौर समारोह का उपयोग कर सकते हैं (लेकिन कि VBA के बारे में पता होना चाहते हैं राउंड फ़ंक्शन बैंकर के गोलाकार का उपयोग करता है, जिसे राउंड-टू-इवन भी कहा जाता है, जहां यह 5 ऊपर या नीचे गोल करेगा; पारंपरिक गोलिंग का उपयोग करके गोल करने के लिए, प्रारूप का उपयोग करें)।

आप truncate गोलाई के बिना मूल्य चाहते हैं, तो स्वीकार किए जाते हैं जवाब में के रूप में तार का उपयोग करने की कोई जरूरत नहीं है - केवल गणित का उपयोग करें:

Dim lDecimalPlaces As Long: lDecimalPlaces = 2 
Dim dblValue As Double: dblValue = 2.345 

Dim lScale = 10^lDecimalPlaces 
Dim dblTruncated As Double: dblTruncated = Fix(dblValue * lScale)/lScale 

यह पैदावार "2.34"।

+0

फिक्स फ़ंक्शन मेरे मामले में बहुत उपयोगी था! – carlossierra

+1

मैं बैंकर के गोलाकार के बारे में भूल गया था। +1 "बस गणित का उपयोग करें" jab के बावजूद +1। ओपी के अनुरोध के रूप में केवल संख्या प्रदर्शित करने के लिए, यदि आप गोल करने के बारे में ज्यादा परवाह नहीं करते हैं, तो प्रारूप() नौकरी के लिए उपकरण है, और फिक्स() (या Int() से सरल है, जो फिक्स() के बराबर है सकारात्मक संख्या के लिए)। हालांकि, ऐसे मामले हैं जहां बैंकर के गोलाकार उपयोगकर्ता के सवालों का कारण बनेंगे और अधिक जटिल परिवर्तन की आवश्यकता होगी। – GlennFromIowa

4

आप Int() फ़ंक्शन का उपयोग कर सकते हैं। Debug.print Int(1.99543)

या बेहतर:

Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double 
    Trunc = Int(value * (10^num))/(10^num) 
End Function 

तो तुम Trunc(1.99543, 4) ==>result: 1.9954

0

तो मज़ा कहानी का उपयोग कर सकते हैं। मैं एक त्वरित वीबी रूपांतरण समारोह के साथ गड़बड़ कर रहा था। मैं बस एक पूर्णांक में एक डबल छंटनी करना चाहता हूँ।

value = Int(83.768) 
value == 83 

बहुत बढ़िया, वीबी में कुछ वास्तव में काम करता था।

ओह, मैं इसे ऋणात्मक संख्याओं

value = Int(-83.768) 
value == -84 

साथ काम नहीं करता भूल गया ... हाँ है कि बस हो गया। वीबी बैंकर राउंडिंग का उपयोग करता है।

Public Function Trunc(ByVal value As Double) As Integer 
    ' Truncate by calling Int on the Absolute value then multiply by the sign of the value. 
    ' Int cannot truncate doubles that are negative 
    Trunc = (Abs(value)/value) * Int(Abs(value)) 
End Function 

यदि आप विशिष्ट दशमलव स्थान चाहते हैं तो मक्का ने केवल मूल्य के आस-पास एबीएस के साथ किया था, इसलिए इंट ठीक से छंटनी कर सकता है।

Public Function Trunc2(ByVal value As Double, Optional ByVal num As Integer = 1) As Double 
    ' Truncate by calling Int on the Absolute value then multiply by the sign of the value. 
    ' Int cannot truncate doubles that are negative 
    Dim sign As Integer 
    sign = Abs(value)/value 
    Trunc2 = sign * (Int(Abs(value) * (10^num))/(10^num)) 
End Function 
संबंधित मुद्दे