2012-07-05 16 views
8

Bir metin kutusuna görüntülenmek üzere çifte değerindeki ondalık basamakların miktarını kesmem gerekiyor. Bunu vba ile nasıl başardı? Yukarıdaki bilgilerin 1.57 verecektir:VBA'da çift ile VBA'da Truncating

cevap

7

Sen 2 ondalık basamağı

Dval = 1.56789 

Debug.Print Round(dVal,2) 

Debug.Print Format(dVal,"0.00") 

Not göstermek için Örneğin

VBA

yılında FORMAT için ROUND kullanabilir. Eğer 1.56 arıyorsanız Yani o zaman bir dizede Dval saklayabilir ve turda değeri, o zaman Yuvarlak işlevini kullanın (ama VBA en farkında olabilir istiyorsanız o zaman bu

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

do Yuvarlak işlev, Round up to da bilinen, Round up to top, Round up to top, Rounding to kullanarak, Rounding'i kullanır. Eğer truncate yuvarlama olmadan değer istiyorsanız

, daha sonra kabul edilen yanıt olarak dizeleri kullanmaya gerek yoktur - sadece matematik kullanın:

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 

Bu "2,34" verir.

+0

Düzeltme işlevi benim durumumda çok yardımcı oldu! – carlossierra

+1

Banker'in yuvarlanması hakkında unuttum. Küçümseyen rağmen "sadece matematik kullanın" jab. Numarayı istediğiniz OP olarak görüntülemek için, yuvarlama hakkında fazla bir şey umursamıyorsanız, Format() iş için bir araçtır ve Fix() (veya Int() ile eşdeğerdir) pozitif sayılar için). Ancak, Banker'in yuvarlanmasının kullanıcı sorularına neden olacağı ve daha karmaşık bir dönüşüme ihtiyaç duyduğu durumlar vardır. – GlennFromIowa

4

Int() işlevini kullanabilirsiniz. Debug.print Int(1.99543)

Veya Daha iyi:

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

Yani Trunc(1.99543, 4) ==> result: 1.9954

0

Yani eğlenceli bir hikaye kullanabilirsiniz. Hızlı bir VB dönüşüm fonksiyonu ile uğraştım. Sadece iki katına bir tamsayı kesmek istiyorum.

value = Int(83.768) 
value == 83 

Harika, VB'de bir şey gerçekten işe yaradı.

Üzgünüz, bunu negatif sayılar

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

ile çalışmıyor unuttum ... evet bu yeni oldu. VB Banker yuvarlama kullanır.

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 

belirli ondalık Int düzgün kesmek böylece Makah değeri etrafında Ab'lerle sadece yaptıklarını yapmak istiyorum.

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