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
8
A
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ındaFORMAT
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.
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
Düzeltme işlevi benim durumumda çok yardımcı oldu! – carlossierra
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