मुझे टेक्स्टबॉक्स में डिस्प्ले के लिए मेरे डबल वैल्यू के दशमलव स्थानों की मात्रा को कम करने की आवश्यकता है। वीबीए के साथ इसे कैसे प्राप्त किया जाएगा?एक्सेल में वीबीए के साथ डबल ट्रंकिंग
उत्तर
आप 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
आप दौर मूल्य के लिए, तो तुम दौर समारोह का उपयोग कर सकते हैं (लेकिन कि 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"।
आप 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
तो मज़ा कहानी का उपयोग कर सकते हैं। मैं एक त्वरित वीबी रूपांतरण समारोह के साथ गड़बड़ कर रहा था। मैं बस एक पूर्णांक में एक डबल छंटनी करना चाहता हूँ।
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
फिक्स फ़ंक्शन मेरे मामले में बहुत उपयोगी था! – carlossierra
मैं बैंकर के गोलाकार के बारे में भूल गया था। +1 "बस गणित का उपयोग करें" jab के बावजूद +1। ओपी के अनुरोध के रूप में केवल संख्या प्रदर्शित करने के लिए, यदि आप गोल करने के बारे में ज्यादा परवाह नहीं करते हैं, तो प्रारूप() नौकरी के लिए उपकरण है, और फिक्स() (या Int() से सरल है, जो फिक्स() के बराबर है सकारात्मक संख्या के लिए)। हालांकि, ऐसे मामले हैं जहां बैंकर के गोलाकार उपयोगकर्ता के सवालों का कारण बनेंगे और अधिक जटिल परिवर्तन की आवश्यकता होगी। – GlennFromIowa